Beh, credo che se si vuole veramente fare questo, si può provare a creare la tua espressione da soli. Presumo che tu abbia una classe di entità di base che è generica ed è da lì che proviene la proprietà della chiave generica. Ho chiamato questa classe KeyedEntityBase<TKey>
, TKey
è il tipo di chiave (se non si dispone di una classe, va bene, l'unica cosa che ho usato è il vincolo generico). Quindi è possibile creare un metodo di estensione come questo per costruire l'espressione da soli:
public static class Extensions
{
public static IQueryable<TEntity> WhereIdEquals<TEntity, TKey>(
this IQueryable<TEntity> source,
Expression<Func<TEntity, TKey>> keyExpression,
TKey otherKeyValue)
where TEntity : KeyedEntityBase<TKey>
{
var memberExpression = (MemberExpression)keyExpression.Body;
var parameter = Expression.Parameter(typeof(TEntity), "x");
var property = Expression.Property(parameter, memberExpression.Member.Name);
var equal = Expression.Equal(property, Expression.Constant(otherKeyValue));
var lambda = Expression.Lambda<Func<TEntity, bool>>(equal, parameter);
return source.Where(lambda);
}
}
E poi, è possibile utilizzarlo come questo (per un tipo di chiave intera):
context.Set<MyEntity>.AsNoTracking().WhereIdEquals(m=>m.Id, 9).ToList();
fonte
2017-09-14 16:40:00
"* posso proprio 't * "non è un'affermazione esecutiva a meno che tu non possa mostrarci il motivo per cui non puoi. Data la conoscenza della comunità SO, forse puoi, semplicemente non sai ** come **. – Tommy
@ Grazie Tommy, ha aggiunto ulteriori dettagli. –
Dovresti essere in grado di usare 'Equals' piuttosto che usare' == 'se questo è il tuo unico problema, ma sospetto che ci saranno anche altri problemi che non stai ancora condividendo nella tua domanda: non esiste un modo standard per estrarre le proprietà chiave di un'entità, ad esempio. – hvd