如何使用linq获取集合,但从嵌套集合中去掉一些实体

本文关键字:集合 实体 嵌套 linq 何使用 获取 | 更新日期: 2023-09-27 18:06:13

我有这个linq:

List<Group> groups = 
   context.Groups.Where(group => group.Station.Id == stationId).ToList();

但我的群用户太多了。

我想合并这个:

group.Users.Where(u => u.Account.IsActive == true)

但是我把它放在任何地方都会出错。

在尝试了这么多事情却没有做好之后,我们非常感谢你的帮助。

更新:

这是我在尝试All((和其他函数时遇到的唯一语法错误。。我以前似乎从未和林克有过如此复杂的关系。。

更新:

 List<Group> groups = context.Groups.Where(group => 
    group.Station.Id == stationId && 
    group.Users.Where(u => u.Account.IsActive == true)).ToList();

错误:

操作员的&amp;'不能应用于"bool"类型的操作数,并且"System.Collections.Generic.IENumberable">

如何使用linq获取集合,但从嵌套集合中去掉一些实体

List<Group> groups = context.Groups
                            .Where(group => group.Station.Id == stationId 
                                            && group.Users.Where(u => u.Account.IsActive == true).Count() > 0).ToList();

你应该把它和count比较一下。这就是错误。

你不能这么做。尚未实现相关实体的筛选。一次只能加载所有相关实体。

因此,您不能从组中删除非活动用户或对其进行筛选,您应该只使用活动用户创建新组。如果使用实体框架,则无法在服务器端执行此操作(您将看到实体或复杂类型"Group"无法在LINQ to Entities查询中构造(。但您可以返回具有所需数据的匿名对象:

var groups = from g in context.Groups
             where g.Station.Id == stationId
             select new {
                Id = g.Id,
                ActiveUsers = g.Users.Where(u => u.Account.IsActive)
             };