我有这个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;
答案 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)
};