C# Linq中的对象子查询/In

3

我有两个对象,包含通用列表属性。

例如:

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; }
}

我从业务逻辑层获取一个通用的章节列表: List mySections=SectionDB.getList();

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

使用对象的 linq,是否可以查询所有至少有一个组在用户类别内的章节?

需要帮助吗?

2个回答

3
from section in mySections
from sectionGroup in section.Groups
where myUser.Groups.Any(userGroup => userGroup == sectionGroup)
select section

我宁愿选择任何一种方法,因为这样可以更有效地使用迭代器。

只要你在完全相同的引用上工作,就像马克所说的那样,否则您可以在.Any()调用中包含一个Func<Group, bool>,以获取例如ID检查。请参阅http://msdn.microsoft.com/en-us/library/system.linq.enumerable.any.aspx。 - user57508
我有点好奇如何使用Mark的方法来使用Func<Group,bool)。 无论如何,我感谢大家。 - Stan92
例如.Any(userGroup => userGroup.Id == sectionGroup.Id) - 您也可以实例化您的IEqualityComparer<Group>,并执行类似于.Any(userGroup => myInstanceOfMyComparer.Equals(userGroup, sectionGroup))的操作。另一种方法是在Group上实现IEquatable<Group> - user57508

2
var sections = mySections.Where(x => x.Groups.Intersect(myUser.Groups)
    .Any()).ToList();

(请注意,这取决于 Group 实例的引用相等性,或者 Group 类型上适当的 Equals / GetHashCode 实现)

@Marc:我总是从你身上学到东西。就像直到今天我才注意到“无参数”的 Any 方法 :) - leppie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接