【问题标题】:c# Linq Object subQuery / Inc# Linq Object subQuery / In
【发布时间】:2010-01-19 12:10:33
【问题描述】:

我有 2 个包含通用列表属性的对象。 即:

public class User
{
    public string Sid { get; set; }
    public List<Group> Groups { get; set; }
}

public class Section
{
    public string Sid { get; set; }
    public List<Group> Groups { get; set; }
}

从我的 BLL 中,我得到了一个通用的部分列表 列出 mySections=SectionDB.getList();

我的用户对象包含用户信息 用户 myUser=UserDB.getInfo(sid);

使用 linq to 对象,是否可以进行查询以检索在组用户类中至少有一个组的所有部分?

有什么帮助吗?

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:
    from section in mySections
    from sectionGroup in section.Groups
    where myUser.Groups.Any(userGroup => userGroup == sectionGroup)
    select section
    

    我宁愿选择任何一个,因为您使用迭代器的效率更高

    【讨论】:

    • 只要您使用完全相同的参考...就像 marc 所说...否则您可以在 .Any() 调用中包含 Func 以获取例如。检查身份证。见msdn.microsoft.com/en-us/library/…
    • 我有点好奇如何使用 Mark 的方法来使用 Func
    • 例如。 .Any(userGroup =&gt; userGroup.Id == sectionGroup.Id) - 你也可以实例化你的IEqualityComparer&lt;Group&gt; 并像.Any(userGroup =&gt; myInstanceOfMyComparer.Equals(userGroup, sectionGroup)) 一样做某事。另一种方法是在Group 上实现IEquatable&lt;Group&gt;
    【解决方案2】:
    var sections = mySections.Where(x => x.Groups.Intersect(myUser.Groups)
        .Any()).ToList();
    

    (请注意,这依赖于 Group 实例的引用相等性,或 Group 类型上的合适的 Equals / GetHashCode 实现)

    【讨论】:

    • @Marc:我总是从你身上学到一些东西。就像直到今天我从未注意到“无参数”Any 方法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多