我有实体Group
and User
.
the Group
实体有Users
属性是用户列表。
用户有一个名为IsEnabled
.
我想编写一个返回列表的 linq 查询Group
s,仅包含User
s whose IsEnabled
是真的。
例如,对于如下数据
AllGroups
Group A
用户 1(IsEnabled = true)
用户 2(IsEnabled = true)
用户 3(IsEnabled = false)
Group B
用户 4(IsEnabled = true)
用户 5(IsEnabled = false)
用户 6(IsEnabled = false)
我想要得到
FilteredGroups
Group A
用户 1(IsEnabled = true)
用户 2(IsEnabled = true)
Group B
用户 4(IsEnabled = true)
我尝试了以下查询,但 Visual Studio 告诉我
[无法分配属性或索引器“用户”——它是只读的]
FilteredGroups = AllGroups.Select(g => new Group()
{
ID = g.ID,
Name = g.Name,
...
Users = g.Users.Where(u => u.IsInactive == false)
});
感谢您的帮助!
没有“好的”方法可以做到这一点,但你可以尝试这个 - 项目两者,Group
并过滤Users
到一个匿名对象上,然后Select
只是Groups
:
var resultObjectList = AllGroups.
Select(g => new
{
GroupItem = g,
UserItems = g.Users.Where(u => !u.IsInactive)
}).ToList();
FilteredGroups = resultObjectList.Select(i => i.GroupItem).ToList();
这不是一个记录在案的功能,并且与 EF 构造 SQL 查询的方式有关 - 在这种情况下,它应该过滤掉子集合,因此您的FilteredGroups
列表将仅包含活跃用户。
如果这有效,您可以尝试合并代码:
FilteredGroups = AllGroups.
Select(g => new
{
GroupItem = g,
UserItems = g.Users.Where(u => !u.IsInactive)
}).
Select(r => r.GroupItem).
ToList();
(这未经测试,结果取决于 EF 将如何处理第二个Select
,所以如果您在尝试后让我们知道哪种方法有效,那就太好了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)