我正在尝试编写一种非常通用的方法来批量加载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)