2012-01-04 4 views
2

Я использую следующий запрос в Entity SQLEntity SQL IN/Multiset вопрос

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

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

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

Спасибо, что получил смысл. –

Смежные вопросы