实体SQL IN / Multiset问题

时间:2012-01-04 13:42:46

标签: entity-framework entity-sql

我在实体sql中使用以下查询

 Select n.Name as NodeNameN  from Nodes  as n where n.Name IN MultiSet (@Test)

使用以下代码在运行时替换该值:

var reader = model.CreateQuery<System.Data.Common.DbDataRecord>(
                Statement,
                Parameters.ToArray());

执行此操作时,sql server中生成的相应参数如下:

exec sp_executesql N'SELECT 
1 AS [C1], 
[Extent1].[Name] AS [Name]
FROM [dbo].[Nodes] AS [Extent1]
WHERE [Extent1].[Name] = @Test',N'@Test nvarchar(4000)',@Test=N'''BMA'',''Area A'','

而不是IN子句,=子句被替换。

我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

您必须使用多个SQL参数参数化multiset - 您当前的查询被解释为带有一个元素的多集,因此实体框架完成的SQL映射是正确的(带有一个元素的IN子句相当于WHERE子句测试与该元素的相等性 - 只需传递更多参数:

Select n.Name as NodeNameN  from Nodes  as n where n.Name IN MultiSet (@Test1, @Test2)