C# 过滤器LINQ实体包含查询

C# 过滤器LINQ实体包含查询,c#,linq,entity-framework,linq-to-sql,C#,Linq,Entity Framework,Linq To Sql,我有下面两张桌子 Groups Id (int) People Id (int) GroupId (int, Groups.Id) IsSelected (bit) 这将在单个查询中返回所有组及其所有成员(人员) var grps = myDatabase.Groups.Include("People"); 我如何编写一个查询,返回所有组中已选定的人(IsSelected=true)?您需要使用“join”方法,如下所示: (from g in myDatabase.Groups joi

我有下面两张桌子

Groups
Id (int)

People
Id (int)
GroupId (int, Groups.Id)
IsSelected (bit)
这将在单个查询中返回所有组及其所有成员(人员)

var grps = myDatabase.Groups.Include("People");

我如何编写一个查询,返回所有组中已选定的人(IsSelected=true)?

您需要使用“join”方法,如下所示:

(from g in myDatabase.Groups
 join p in myDatabase.People on g.Id equals p.GroupId
 where p.IsSelected == true
 select g);
这将为您提供所有已选择人员的组。

或签出。where()

差不多

var grps = myDatabase.Groups.Include("People").Where(x => x.IsSelected); 
//x => !x.IsSelected for false

让我知道这是否有效

    var grps = myDatabase.Groups.Select(g=> new { g, people = g.People.Where(p=>p.IsSelected)});

这将仅返回包含选定人员的组。它应该返回所有组,不管它们是否包含人,但如果它们包含人,则只包含选定的人。啊,我误解了你的意图。这只是在左右语法,希望它能碰巧开始工作。哦,不,我只是建议使用。where()作为筛选方法,根据问题。“类似”-作为一个指针来解决它。但公平地说,复制和粘贴OP语句并将其粘贴在末尾是很草率的。在LINQ to SQL中,可以使用DataLoadOptions.LoadWith添加额外的筛选。使用EF,您将降级到子选择,如本例所示。