我有一個LINQ查詢:子集合不過濾,即使LINQ to SQL中加入存在
var result = from mt in MessageTypes
join mtfmt in MessageTypeField_MessageTypes
on new { MessageTypeID = mt.ID, MessageTypeFieldID = messageTypeFieldId } equals new { MessageTypeID = mtfmt.MessageTypeID, MessageTypeFieldID = mtfmt.MessageTypeFieldID }
where (mt.StatusID == (int)status)
select mt;
或lambda語法,如果你喜歡(我用的那個)(messageTypeFieldID
設置從該變種撥打以上PARAM):
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),但當我看看messageTypes.ToList()[0].MessageTypeField_MessageTypes
例如快速觀看,我期望看到1記錄,我得到一整堆messageTypeField_MessageType記錄〜17 ,只有按MessageTypeFieldID
篩選,而不是MessageTypeID
。它應該在每次迭代時按消息類型ID進行過濾,並只返回一條記錄。關於我做錯什麼的想法,或者我如何能夠實現我所需要的?
對不起,這個複雜的例子,但我希望你們可以幫忙!
哦,你在開玩笑....哈!我只是在這個複雜的查詢上花了一個小時!謝謝Marc!它現在正是我所需要的,我知道必須有一個更簡單的方法。 – GONeale 2009-04-08 07:27:36