私はLINQクエリを持って存在しているにもかかわらず、フィルタリングありませんPARAM):。子コレクションが参加LINQ to SQLのは
var messageTypes = context.MessageTypes
.Join(
context.MessageTypeField_MessageTypes,
mt =>
new
{
MessageTypeID = mt.ID,
MessageTypeFieldID = messageTypeFieldID
},
mtfmt =>
new
{
MessageTypeID = mtfmt.MessageTypeID,
MessageTypeFieldID = mtfmt.MessageTypeFieldID
},
(mt, mtfmt) =>
new
{
mt = mt,
mtfmt = mtfmt
}
)
.Where(x => (x.mt.StatusID == (int)status))
.Select(x => x.mt);
私はLINQが加わり、それは私が設定しています新しい正規化(多対多)テーブルで必要とされる状況に近づいて、私はすべてのメッセージタイプを戻したい学び始めましたはそれぞれ対応するフィールドは 'MessageTypeField_MessageType'の下に存在します。
私の「MessageTypeField_MessageTypes」テーブルには、このような非常に単純な正規化戦略の設定であると私はMessageTypeIDはそれができるので、それは固有のデータは「多くの持っている」にもかかわらず必ず明記してください:
[ID | MessageTypeID | MessageTypeFieldID]
1 63 10
1 63 11
1 63 12
今すぐ上記のコードの実行を私は満足しているクエリを返します。(正確なINNER JOINを実行します)しかし、1レコードが表示されると予想されるクイックウォッチで例えばmessageTypes.ToList()[0].MessageTypeField_MessageTypes
を見ると、messageTypeField_MessageTypeレコードの全体のスタックが得られます〜17 、のみMessageTypeFieldID
によってフィルタリングされ、ではなくも同様である。各反復でメッセージタイプIDでフィルタリングし、1つのレコードだけを返します。私が間違ってやっていることに関するアイデアや、私が必要とするものをどのように達成できるのか?
ご迷惑をかけて申し訳ありませんが、皆さんのお役に立てれば幸いです。
ああ、あなたは冗談だよ!私はちょうどその複雑なクエリの良い時間を過ごした!ありがとうMarc!それは今、私が必要としていたことを正確に行います。私は簡単な方法が必要であることを知っていました。 – GONeale
もっと簡単に:dlo.AssociateWith(mt => mt.MessageTypeField_MessageTypes.Where(mtfmt => mtfmt.MessageTypeFieldID == messageTypeFieldID)); もう一度ありがとうございます。私は実際にDataLoadOptionsクラスを見てください。;) –
GONeale
@GONealeはLoadWithと組み合わせて熱心に負荷をかけています:) ...また、それは唯一の方法ではありません。関係。 – eglasius