2012-01-04 8 views
2
私は、エンティティのSQLで次のクエリを使用しています

エンティティSQL IN /多重集合問題

値は以下のコード使用して実行時に置換されたされ
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

あなたが複数のSQLパラメータを使用してmultisetをパラメータ化する必要があります - あなたの現在のクエリが要素でマルチセットとして解釈されるため、エンティティフレームワークによって行わSQLマッピングが正しいか(一つの要素を持つIN句は同等ですその要素と等しいかどうかをテストするWHERE句に) - より多くのパラメータを渡すだけです。

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

ありがとうございます。 –