繁体   English   中英

如何在Linq语句的多重联接中包含所有字段?

[英]How to include all fields in a multiple join into Linq statement?

var largeset =
from invs in context.Invoices
join lines in context.InvoiceLines on invs.InvoiceId equals lines.InvoiceId
join tracks in context.Tracks on lines.TrackId equals tracks.TrackId into grp
select new
          {
              Invoice = invs,
              Detail = grp
          };

在上面的join into语句中,Detail是一个列表,但仅包含Invoice和Track列。 我也希望能够从InvoiceLine获取列。

提前致谢。

如果你想获得的行信息列表发票,你需要移动into的第一join并执行其他join内外部select

像这样:

var largeset =
    from inv in context.Invoices
    join line in context.InvoiceLines on inv.InvoiceId equals line.InvoiceId into lines
    select new
    {
        Invoice = inv,
        Lines =
            from line in lines
            join track in context.Tracks on line.TrackId equals track.TrackId
            select new { Line = line, Track = track }
    };

作为Ivan解决方案的替代方案,它应产生更好的性能。

var largeset =
  from invs in context.Invoices
  join lines in context.InvoiceLines on invs.InvoiceId equals lines.InvoiceId
  join tracks in context.Tracks on lines.TrackId equals tracks.TrackId
  group new { invs, lines, tracks }
  by new
  {
      invs.InvoiceId,
      invs.InvoiceDate,
      invs.CustomerId,
      invs.Customer.LastName,
      invs.Customer.FirstName
  } into grp
  select new
  {
      InvoiceId = grp.Key.InvoiceId,
      InvoiceDate = grp.Key.InvoiceDate,
      CustomerId = grp.Key.CustomerId,
      CustomerLastName = grp.Key.LastName,
      CustomerFirstName = grp.Key.FirstName,
      CustomerFullName = grp.Key.LastName + ", " + grp.Key.FirstName,
      TotalQty = grp.Sum(l => l.lines.Quantity),
      TotalPrice = grp.Sum(l => l.lines.UnitPrice),
      Tracks = grp.Select(t => t.tracks)
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM