我在实体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
子句,=
子句被替换。
我在这里做错了吗?
答案 0 :(得分:1)
您必须使用多个SQL参数参数化multiset - 您当前的查询被解释为带有一个元素的多集,因此实体框架完成的SQL映射是正确的(带有一个元素的IN子句相当于WHERE子句测试与该元素的相等性 - 只需传递更多参数:
Select n.Name as NodeNameN from Nodes as n where n.Name IN MultiSet (@Test1, @Test2)