Eh, bunu gerçekten yapmak istiyorsanız, size ifadeyi kendiniz oluşturmayı deneyebilirsiniz sanırım. Genel bir temel varlık sınıfınız olduğunu ve genel anahtar özelliğinin nereden geldiğini tahmin ediyorum. Bu sınıfı KeyedEntityBase<TKey>
olarak adlandırdım, TKey
anahtarın türündedir (eğer böyle bir sınıfınız yoksa, sorun değil, bunun için kullandığım tek şey genel kısıtlamadır).
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);
}
}
Ve sonra, (bir tamsayı anahtar türü için) bu gibi kullanabilirsiniz: Sonra ifadeyi kendini inşa etmek için böyle bir uzatma yöntemi oluşturabilir
context.Set<MyEntity>.AsNoTracking().WhereIdEquals(m=>m.Id, 9).ToList();
"* Sadece can Bize neden yapamayacağınızı gösteremedikçe 't *' uygulanabilir bir iddia değildir. SO topluluğunun bilgisi göz önünde bulundurulduğunda, belki de, sadece bilmiyorsunuz ** nasıl **. – Tommy
@Tommy teşekkürler, daha fazla ayrıntı ekledi. –
'==' işlevini kullanmak yerine '==' kullanabilmeniz gerekir, çünkü tek sorun budur, ama yine de sorunuzda paylaşmamanız gereken başka sorunlar da olabileceğinden şüpheleniyorum: standart bir ayıklama yöntemi yok Örneğin, bir varlığın anahtar özellikleri. – hvd