gpt4 book ai didi

Linq To Entities - 如何过滤子实体

转载 作者:行者123 更新时间:2023-12-02 11:54:08 25 4
gpt4 key购买 nike

我有实体GroupUser
Group 实体具有 Users 属性,它是用户列表。
用户有一个名为 IsEnabled 的属性。

我想编写一个返回 Group 列表的 linq 查询,该列表仅包含 IsEnabled 为 true 的 User

例如,对于如下数据
所有组
A组
用户 1(IsEnabled = true)
用户 2(IsEnabled = true)
用户 3(IsEnabled = false)

B组
用户 4(IsEnabled = true)
用户 5(IsEnabled = false)
用户 6(IsEnabled = false)

我想得到
过滤组
A组
用户 1(IsEnabled = true)
用户 2(IsEnabled = true)

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 投影到匿名对象上,然后仅选择:

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,因此如果您在尝试后让我们知道哪种方法有效,那就太好了)。

关于Linq To Entities - 如何过滤子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com