私はこれをやろうとしています:
var results = (from s in db.ExampleMaster
.Include("State")
.Include("Group")
.Where("it.Group.IdGroup in {1,2,3,4,5}")
.Where("it.IdState in {1,2}")
select s);
スキーマ:
ExampleMaster:
IdExampleMaster int,
IdState int
State:
IdState int,
Description varchar(100)
Group:
IdGroup int
IdExampleMaster int
SQL Desired は次のようなものです。
SELECT * FROM ExampleMaster e
inner join State s on s.IdState = e.IdState
Inner join Group g on e.IdExampleMaster = g.IdExampleMaster
where g.IdGroup in (1,2,3,4,5) and e.IdState in (1,2)
生成された SQL は次のようになります。
SELECT *
FROM ExampleMaster AS [Extent1]
LEFT OUTER JOIN [dbo].[Group] AS [Extent2] ON [Extent1].[IdExampleMaster] = [Extent2].[IdGroup]
LEFT OUTER JOIN [dbo].[Group] AS [Extent3] ON [Extent2].[IdGroup] = [Extent3].[IdGroup]
LEFT OUTER JOIN [dbo].[Group] AS [Extent4] ON [Extent2].[IdGroup] = [Extent4].[IdGroup]
LEFT OUTER JOIN [dbo].[Group] AS [Extent5] ON [Extent2].[IdGroup] = [Extent5].[IdGroup]
LEFT OUTER JOIN [dbo].[Group] AS [Extent6] ON [Extent2].[IdGroup] = [Extent6].[IdGroup]
LEFT OUTER JOIN [dbo].[Group] AS [Extent7] ON [Extent2].[IdGroup] = [Extent7].[IdGroup]
LEFT OUTER JOIN [dbo].[State] AS [Extent8] ON [Extent1].[IdState] = [Extent8].[IdState]
WHERE ([Extent1].[IdState] IN (1,2)) AND ([Extent3].[IdGroup] = 1 OR [Extent4].[IdGroup] = 2 OR [Extent5].[IdGroup] = 3 OR [Extent6].[IdGroup] = 4 OR [Extent7].[IdGroup] = 5) ) AS [Filter1]
状態のケース (Included テーブルは不要) が IN 句でうまく機能し、グループがリストの項目よりも多くの結合を作成し、さらには期待どおりに機能しない理由がわかりません。
何か案が?
編集済み
データベース スキーマにエラーが見つかりました。
.Where("it.Group.IdGroup in {1,2,3,4,5}")
は
「IdGroup」は「Transient.collection[myModel.Group(Nullable=True,DefaultValue=)]」のメンバーではありません。コレクション要素のプロパティを抽出するには、サブクエリを使用してコレクションを反復処理します