0

我有“组”类,在这个类中我有一个“用户”类的集合

public partial class Group
{
    public Group()
    {
        this.User= new HashSet<User>();
    }

    [Key]
    public int CodGroup { get; set; }
    [Required]
    [StringLength(50, MinimumLength = 3)]
    public string Name { get; set; }

    public virtual ICollection<User> User{ get; set; }
}

我的班级用户

public partial class User
{
    public User()
    {
    }
    [Key]
    public int CodUser { get; set; }
    [Required]
    public int CodGroup { get; set; }
    [Required]
    [StringLength(100, MinimumLength = 3)]
    public string Name { get; set; }
    [Required]
    public bool Active{ get; set; }

    public virtual Group Group{ get; set; }
}

我有收藏IEnumerable<Group> Groups

问题是,我在每个组内的用户集合也包含非活动用户,如何使用 lambda 表达式仅获取每个组中的活动用户???

Groups.Where( ??? )
4

2 回答 2

2

如果您尝试获取任何用户处于活动状态的组,您需要:

var groups = Groups.Where(g => g.Users.Any(u => u.Active));

如果您想要所有用户都处于活动状态的组,您需要:

var groups = Groups.Where(g => g.Users.All(u => u.Active));

基本上,只要你清楚地表达了你想要什么,LINQ 看起来就非常相似:)

于 2013-11-05T18:16:58.117 回答
1

如果您想从平面列表中的组中获取所有活动用户,您可以使用

IEnumerable<User> activeUsers = Groups.SelectMany(group => group.Users)
                                      .Where(user => user.Active);
于 2013-11-05T18:01:01.943 回答