如何使用linq获取集合但忽略嵌套集合中的某些实体?

时间:2014-06-02 21:05:31

标签: c# linq

我有这个linq:

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

但我为这些群体获得了太多用户。

我想加入这个:

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

但我不能在任何地方适应它而不会出错。

在尝试了很多事情而没有做对的时候,非常感谢。

更新:

我在尝试All()和其他函数时遇到的唯一语法错误。我似乎没有使用linq进行过如此复杂的问题..

更新:

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

错误:

  

运营商&amp;&amp;&amp;&#39;不能应用于&#39; bool&#39;类型的操作数和   &#39; System.Collections.Generic.IEnumerable&#39;

2 个答案:

答案 0 :(得分:2)

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

您应该将它与计数进行比较。那就是错误。

答案 1 :(得分:1)

你不能这样做。 Filtering of related entities尚未实施。相关实体只能一次加载。

因此,您无法从组中删除非活动用户或过滤它们,您应该创建仅包含活动用户的新组。如果您使用的是Entity Framework,则无法在服务器端执行(您将看到实体或复杂类型'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)
             };