如何解决Linq Left Join选择一个集合作为属性
我是Linq的新手,我想连接两个表-精确地说是左连接,我希望结果的属性是集合的前10个结果。
考虑示例模型
Class A { int Id,List<B> Collection }
Class B { int Id,int x,int y }
我正在尝试执行左连接,以便我期望的响应必须采用以下格式:
int A
Collection (part of B) =>{int x}
我尝试了以下查询
From A in _context.A
Join B in (from B in _context.B select new {Id,x }) on B.Id equals A.Id Into subB
From minimalB in subB.defaultIfEmpty()
Select {A.Id,minimalB.x}
我如何实现结果,以便x属性作为结果的集合映射。
对于在先对这个问题的荒谬解释,我深表歉意!
解决方法
我认为您不需要from minimalB in subB.defaultIfEmpty
部分,因为它会从表示为范围变量(a
和minimalB
)的数据集中创建类似于笛卡尔积的东西。 。因此,要获取X
-s的集合,您可以尝试以下操作:
var query = from a in context.A
join b in context.B on a.Id equals b.Id into groupedB
where groupedB.Any()
select new { a.Id,Xs = groupedB.Select(b => b.X) };
顺便说一句,如果您的B
类中已经有A
集合,则可以在没有显式联接的情况下进行查询(在查询提供者仍会进行联接的情况下)
var query = _context.A.Select(a => new
{
a.Id,Bs = a.Collection.Select(b => new { b.X,b.Y })
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。