我正在嘗試根據運算式撰寫條件。我有兩個類 Test1 和 Test2。
public class Test1<TEntity, TProperty>
{
public IQueryable<TEntity> Test(
IQueryable<TEntity> queryable,
Expression<Func<TEntity, TProperty>> expression,
TProperty value
)
{
MemberExpression memberExpression = (MemberExpression)(expression.Body);
var propName = memberExpression.Member.Name;
// Cannot apply operator '>' to operands of type 'P' and 'P'
queryable = queryable.Where(e => EF.Property<TProperty>(e, propName) > value));
return queryable;
}
}
public class Test2<TEntity, TProperty>
where TProperty : IComparable
{
public IQueryable<TEntity> Test(
IQueryable<TEntity> queryable,
Expression<Func<TEntity, TProperty>> expression,
TProperty value
)
{
MemberExpression memberExpression = (MemberExpression)(expression.Body);
var propName = memberExpression.Member.Name;
// This one compiles
queryable = queryable.Where(e => EF.Property<TProperty>(e, propName).CompareTo(value) > 0);
return queryable;
}
}
第一個 (Test1) 嘗試與值進行比較,>但它不編譯。第二個 (Test2) 將泛型型別宣告為 IComparable 并在 where 條件中使用 .CompareTo() 方法。這個編譯但在運行時拋出:
The LINQ expression 'DbSet<SortableEntity>
.Where(s => s.IsDeleted == False)
.Where(s => EF.Property<long>((object)s, "Id").CompareTo((object)__value_0) > 0)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync()
是否可以根據運算式以某種方式撰寫自定義條件?我希望屬性/成員運算式由用戶傳遞,然后決定將什么條件應用于 IQueryable。
uj5u.com熱心網友回復:
好吧,這EF.Property是您在這種情況下必須使用的最后一件事。你有財產,甚至是正確的身體 - 使用這個:
public class Test1<TEntity, TProperty>
{
public IQueryable<TEntity> Test(
IQueryable<TEntity> queryable,
Expression<Func<TEntity, TProperty>> expression,
TProperty value
)
{
var predicateLambda = Expression.Lambda<Func<TEntity, bool>>(
Expression.GreaterThan(expression.Body, Expression.Constant(value, typeof(TProperty))),
expression.Parameters[0]);
queryable = queryable.Where(predicateLambda);
return queryable;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360047.html
標籤:林克 实体框架核心 ef-core-3.1
上一篇:在某些位置有字母的單詞串列中查找
下一篇:回傳與linq中的串列匹配的專案
