使用linq交叉2个数组

时间:2013-03-18 20:10:49

标签: linq join

我相信我必须使用JOIN,但我无法弄清楚如何使用Linq正确使用它

我有两个数组,

Array1 =所有成员的数组(allMembers)

每个成员都是一个将memberID作为字符串字段

的对象

Array2 = MemberID字符串数组(membersToSelect)

我想返回所有成员,其中memberID列在了Array2。

这是我到目前为止所尝试的

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

2 个答案:

答案 0 :(得分:2)

你应该可以这样做:

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

答案 1 :(得分:2)

好像你不理解LINQ连接语法。此特定重载允许您指定将在比较中使用哪些属性/对象(实际上,使用您指定的键的哈希来创建查找)。

主要概念是它与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