我在EF对象上使用的计算属性无法直接传递给where()
子句:
{"The specified type member 'SomeProp' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."}
根据我在SO上阅读的内容,可以通过将Expression<Func<T, bool>>
作为参数传递给where()
来避免这种情况。
将表达式编译为Func
可以正常工作:
Expression<Func<Foo, bool>> expr = e => f => f.SomeCalculatedProperty == 1;
Func<Foo, bool> compiled = expr.Compile();
Foo result = dbContext.Foo.Where(compiled);
但是通过表达式会给我上面的错误,即:
Expression<Func<Foo, bool>> expr = e => f => f.SomeCalculatedProperty == 1;
Foo result = dbContext.Foo.Where(e);
基于this,最后一个例子不应该正常吗?
答案 0 :(得分:0)
在示例一中,您正在调用扩展方法Queryable.Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
,这会将查询转换为sql并应用过滤器服务器端。
在示例2中,您正在调用扩展方法Enumerable.Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
,这将返回数据库中的所有行,然后在应用过滤器的程序的内存中返回。
对于你的第三个例子,我将引用Servy's comment
您的第一个和第三个代码段在功能上完全相同。必有 有些不同,你没有表现出一个工作和另一个 没有。