【问题标题】:Using linq to intersect 2 arrays使用 linq 相交 2 个数组
【发布时间】:2013-03-19 04:49:24
【问题描述】:

我相信我必须使用 JOIN,但我不知道如何使用 Linq 正确使用它

我有两个数组,

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

每个成员都是一个具有 memberID 作为字符串字段的对象

Array2 = MemberID 字符串数组 (membersToSelect)

我想返回所有成员 ID 在 Array2 中列出的成员。

这是我迄今为止尝试过的

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

【问题讨论】:

    标签: linq join


    【解决方案1】:

    您似乎不了解 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) => 就是你的join 中匹配的Member/string

    【讨论】:

    • 感谢您的解释,这帮助我更好地理解了 JOIN!
    【解决方案2】:

    你应该能够做到这一点:

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

    【讨论】:

    • 我已经这样做了,使用单个参数进行匹配,所以你说它也会匹配 membersToSelect 数组中的所有内容?
    • 呃,不明白你的意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多