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