鉴于父母及其子女的名单,我想返回所有父母和他们的男孩的名单。这在sql查询中是微不足道的。我遇到的问题是Linq到EF我似乎无法让查询以任何方式工作。由于EF的限制,我不能做一个包括,以确保我想要的孩子的回归。如何在LINQ中完成以下sql以返回我的父实体与子集合,只有男性或空集合忽略所有女性记录?
SQL
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'
答案 0 :(得分:3)
如果你不介意投射到匿名类型或像这样的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
};
答案 1 :(得分:1)
尝试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)