我正在尝试使用Linq to Entities编写一个CompiledQuery,该实体将替换采用两个数组(在本例中为逗号分隔的文本)参数的存储过程。基本上,SQL是这样的:
*Stored Proc definition*
@ArrayParm1 TEXT,
@ArrayParm2 TEXT
-- etc.
SELECT [fieldList]
FROM someTable
WHERE someTable.Field1 IN (SELECT * FROM dbo.fncCSVToTable(@ArrayParm1))
AND someTable.Field2 IN (SELECT * FROM dbo.fncCSVToTable(@ArrayParm2))
dbo.fncCSVToTable
使用数组值创建单列临时表。
public static Func<EntityContext, List<int>, List<string> IQueryable<EntityType>>
SomeQuery =
CompiledQuery.Compile((EntityContext context, List<int> arrayParm1,
List<string> arrayParm2) =>
from c in context.SomeTableEntities
where arrayParm1.Contains(c.Field1)
&& arrayParm2.Contains(c.Field2)
select new EntityType
{
//projection
});
但是,我得到一个运行时错误,指出
Func<>
不能是列表,并且只支持标量参数。这对我来说是有意义的,但我仍然觉得必须有一种方法在编译的查询中实现这一点。有人知道怎么做吗
List.Contains
WHERE ... IN
L2E编译查询中的类型功能?