Nun, ich denke, wenn Sie das wirklich wollen, können Sie versuchen, Ihren Ausdruck selbst zu erstellen. Ich nehme an, Sie haben eine Basis-Entity-Klasse, die generisch ist und von der die generische Key-Eigenschaft kommt. Ich nannte diese Klasse KeyedEntityBase<TKey>
, TKey
ist der Typ des Schlüssels (wenn Sie keine solche Klasse haben, ist das in Ordnung, das einzige, was ich für die generische Einschränkung verwendet habe). Dann können Sie eine Erweiterungsmethode wie diese schaffen den Ausdruck selbst zu bauen:
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);
}
}
Und dann können Sie es wie folgt verwenden (für eine ganze Zahl Schlüsseltyp):
context.Set<MyEntity>.AsNoTracking().WhereIdEquals(m=>m.Id, 9).ToList();
„* Ich kann es einfach 't * "ist kein durchsetzbarer Anspruch, es sei denn, Sie können uns zeigen, warum Sie dies nicht können. Wenn man das Wissen der SO-Community kennt, kann man das vielleicht, man weiß einfach nicht ** wie **. – Tommy
@Tommy danke, fügte weitere Details hinzu. –
Sie sollten 'Equals' anstelle von' == 'verwenden können, wenn das Ihr einziges Problem ist, aber ich vermute, dass es auch noch andere Probleme gibt, die Sie noch nicht mit Ihrer Frage teilen: Es gibt keine Standardmethode zum Extrahieren zum Beispiel die Schlüsseleigenschaften einer Entität. – hvd