Entity SQL IN / проблема мультисети - PullRequest
2 голосов
/ 04 января 2012

Я использую следующий запрос в сущности 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, выглядит следующим образом:

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 Ответ

1 голос
/ 04 января 2012

Вы должны параметризовать ваш мультимножество с более чем одним параметром SQL - ваш текущий запрос интерпретируется как мультимножество с одним элементом, поэтому сопоставление SQL, выполненное Entity Framework, является правильным (Предложение IN с одним элементом эквивалентно предложению WHERE, проверяющему на равенство с этим элементом) - просто передайте больше параметров:

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