2013-03-18 82 views
0

相信我必須使用一個JOIN但我不能找出如何利用它適當地使用LINQ使用LINQ相交2個陣列

我有兩個陣列,

數組1 =陣列中的所有成員(allMembers )

每個成員是具有MEMBERID作爲字符串字段

ARRAY2 =陣列MEMBERID串(membersToSelect)

I W的對象ant返回成員id列出的所有成員int Array2。

這是我用盡爲止

MemberObject[] selectedObjects = allMembers 
              .Join(membersToSelect, 
              memberID => memberID, 
              member => member, 
              (memberID, member) => memberID == member.memberID) 
              .ToArray(); 

回答

2

好像你並不瞭解LINQ聯接語法。這個特定的重載允許你指定比較中使用哪些屬性/對象(實際上,使用你指定的鍵的哈希來創建一個Lookup)。

其主要概念是它與SQL連接非常相似,因爲您正在決定連接列(第二個和第三個參數)。

allMembers // The original collection 
    .Join(membersToSelect, // The collection to join 
     allMem => allMem.MemberID, // Selects your original collections join column 
     joinMem => joinMem, // Selects your joining collections join column (or element) 
     (allMem, joinMem) => allMem) // This "combines" matching elements into the new element you specify. 
     .ToArray(); 

在你的這個特定的例子中,最終的轉化(對於接合元件)導致的結果是布爾值,它並沒有真正多大幫助在這種情況下的陣列。最後的參數最終是您爲原始/加入收藏獲得的匹配。換句話說,上面的(allMem, joinMem) =>是您的連接中的匹配Member/string

+0

謝謝你的解釋,這有助於我理解加入更好! – MichaelTaylor3D 2013-03-18 21:04:08

2

你應該能夠做到這一點:

var selectedObjects = allMembers 
    .Where(x => membersToSelect.Contains(x.memberID)) 
    .ToArray(); 
+0

我用這種方式使用單個參數來匹配,所以你說它也會匹配membersToSelect數組中的所有內容? – MichaelTaylor3D 2013-03-18 20:32:34

+0

呃,不確定你的意思? – 2013-03-18 20:45:17

+0

沒關係大聲笑你的解決方案似乎已經:) – MichaelTaylor3D 2013-03-18 20:49:45