Linq to Entity Framework返回一个父级列表,其中只包含子级的子集或空集合
给我一份父母及其子女的名单,我想返回一份所有父母的名单,只有他们的男性子女。这在sql查询中是微不足道的。我的问题是Linq to EF似乎无法以任何方式使查询工作。由于EF的限制,我不能做一个包含,以确保我想要的孩子返回。如何在LINQ中完成下面的sql,以返回只有男性的父实体和子实体集合,或忽略所有女性记录的空集合 SQLLinq to Entity Framework返回一个父级列表,其中只包含子级的子集或空集合,linq,linq-to-entities,entity-framework-4.1,Linq,Linq To Entities,Entity Framework 4.1,给我一份父母及其子女的名单,我想返回一份所有父母的名单,只有他们的男性子女。这在sql查询中是微不足道的。我的问题是Linq to EF似乎无法以任何方式使查询工作。由于EF的限制,我不能做一个包含,以确保我想要的孩子返回。如何在LINQ中完成下面的sql,以返回只有男性的父实体和子实体集合,或忽略所有女性记录的空集合 SQL SELECT p.Id, p.FirstName, p.LastName, c.Id, c.ParentId, c.FirstName, c.LastName, c.Se
SELECT p.Id, p.FirstName, p.LastName, c.Id, c.ParentId, c.FirstName, c.LastName, c.Sex FROM Parent p
LEFT JOIN children c ON c.ParentId = p.Id AND c.Sex = 'M'
请尝试Where Not In操作符
var query =
from p in dc.Parent
where !(from c in dc.children
select c.ParentId where c.Sex = 'F')
.Contains(c.ParentId)
select c;
我不知道你的对象结构,所以你必须调整查询,但基本概念应该能让你达到你想要的位置。(我不主张语法完全正确:-p)尝试Where Not In操作符
var query =
from p in dc.Parent
where !(from c in dc.children
select c.ParentId where c.Sex = 'F')
.Contains(c.ParentId)
select c;
我不知道你的对象结构,所以你必须调整查询,但基本概念应该能让你达到你想要的位置。(我不主张语法完全正确:-p)如果您不介意投影到匿名类型或POCO之类的类型,您可以实现这一点: 具有子对象集合的父对象:
var query = from p in context.Parents
join c in context.Children.Where(x => x.Sex == 'M') on p.Id equals c.ParentId into childrenGroup
select new
{
Parent = p,
Children = childrenGroup,
};
展开列表:
var query = from p in context.Parents
from c in context.Children.Where(x => p.Id == x.ParentId)
.Where(x => x.Sex == 'M')
.DefaultIfEmpty()
select new
{
ParentId = p.Id,
ParentFirstName = p.FirstName,
ParentLastName = p.LastName,
ChildId = c.Id,
ChildFirstName = c.FirstName,
ChildLastName = c.LastName,
ChildSex = c.Sex
};
如果您不介意投影到匿名类型或POCO之类的类型,则可以实现这一点: 具有子对象集合的父对象:
var query = from p in context.Parents
join c in context.Children.Where(x => x.Sex == 'M') on p.Id equals c.ParentId into childrenGroup
select new
{
Parent = p,
Children = childrenGroup,
};
展开列表:
var query = from p in context.Parents
from c in context.Children.Where(x => p.Id == x.ParentId)
.Where(x => x.Sex == 'M')
.DefaultIfEmpty()
select new
{
ParentId = p.Id,
ParentFirstName = p.FirstName,
ParentLastName = p.LastName,
ChildId = c.Id,
ChildFirstName = c.FirstName,
ChildLastName = c.LastName,
ChildSex = c.Sex
};