小编Ran*_*ust的帖子

where子句的通用表达式 - "LINQ to Entities中不支持LINQ表达式节点类型'Invoke'."

我正在尝试编写一种非常通用的方法来批量加载EF实体,使用Contains方法生成SQL IN语句.我找到了工作,如果我通过在整个表达式,但是当我尝试动态构建表达式,我得到一个"的LINQ表达式节点类型'调用’不支持LINQ到实体." 所以我知道这意味着EF认为我正在调用一个任意方法而且它无法将其转换为SQL,但我无法弄清楚如何让它理解底层表达式.

所以如果我做这样的事情(只显示相关的片段):

功能声明:

public static List<T> Load<T>(IQueryable<T> entityQuery, int[] entityIds, Func<T, int> entityKey, int batchSize = 500, Func<T, bool> postFilter = null) where T : EntityObject
{
    var retList = new List<T>();

    // Append a where clause to the query passed in, that will use a Contains expression, which generates a SQL IN statement.  So our SQL looks something like
    // WHERE [ItemTypeId] IN (1921,1920,1922)
    // See http://rogeralsing.com/2009/05/21/entity-framework-4-where-entity-id-in-array/ for details
    Func<int[], Expression<Func<T, bool>>> containsExpression = (entityArray => (expr …
Run Code Online (Sandbox Code Playgroud)

linq generics entity-framework expression-trees linq-to-sql

5
推荐指数
1
解决办法
2065
查看次数