2

我在实体 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子句的=子句被替换。

我在这里做错什么了吗?

4

1 回答 1

1

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

Select n.Name as NodeNameN  from Nodes  as n where n.Name IN MultiSet (@Test1, @Test2)
于 2012-01-04T14:08:29.770 回答