我需要根据条件为linq查询的included属性构造“where” predicate 。为了达到这个目的,我使用表达式,在结果中我得到了Func<in T, out TResult>
类型的 predicate 。但是当我试图将 predicate 传递给included属性的.Where()
方法时,我得到了异常:
var result = query
.Include(x => x.Collection.Where(predicate))
.ToList();
例外情况:
Expression of type 'System.Func`2[...]' cannot be used for parameter of type 'System.Linq.Expressions.Expression`1[System.Func`2[...]]' of method 'System.Linq.IQueryable`1[...] Where[...](System.Linq.IQueryable`1[...], System.Linq.Expressions.Expression`1[System.Func`2[...]])' (Parameter 'arg1')
但是直接传递等价于 predicate 的lambda不会引起任何问题:
var result = query
.Include(x => x.Collection.Where(c => someCondition1(c) && someCondition2(c)))
.ToList();
1条答案
按热度按时间e4yzc0pl1#
Linq需要能够分解 predicate 表达式,从中创建SQL语句。
它必须是: