我正在尝试为实体框架列表创建一个过滤方法并更好地理解
Expression<Func<...
我有一个这样的测试功能。
public IQueryable<T> Filter<T>(IEnumerable<T> src, Expression<Func<T, bool>> pred)
{
return src.AsQueryable().Where(pred);
}
如果我这样做:
context.Table.Filter(e => e.ID < 500);
或这个:
context.Table.Filter(e => e.SubTable.Where(et => et.ID < 500).Count() > 0 && e.ID < 500);
这一切都很好。
但如果我这样做:
context.Table.Filter(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
或这个:
context.Table.Where(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
我收到一个错误。
LINQ to Entities does not recognise the method ...Filter...
为什么它在一种情况下有效,而在另一种情况下无效?我应该在过滤器中进行哪些更改以使其与相关表一起使用?我更喜欢远离其他外部库,因为我想要了解它是如何工作的,并且能够在未来的任何场景中使用它。
在前两种情况下,过滤器在数据库中正确运行。