c# - 如何加入 groupby generic
问题描述
我在这里有一个关于如何使下面的连接更通用的问题,我们可以在这里看到如果我有 3 张发票,我必须再添加 3 个连接,
你想让这个连接尽可能通用吗?
(from line in associationRecord
join invoice1 in headers on line.InvoiceNumber equals invoice1.DocumentNumber
join item1 in items on invoice1.DocumentNumber equals item1.InvoiceNumber into h1Items
join impDeclaration1 in importDeclarations on invoice1.DocumentNumber equals impDeclaration1.InvoiceNumber into g1
from imp1 in g1.DefaultIfEmpty()
join invoice2 in headers on line.AssociatedInvoiceNumber equals invoice2.DocumentNumber
join item2 in items on invoice2.DocumentNumber equals item2.InvoiceNumber into h2Items
join impDeclaration2 in importDeclarations on invoice2.DocumentNumber equals impDeclaration2.InvoiceNumber into g2
from imp2 in g2.DefaultIfEmpty()
select new { invoice1, invoice2, h1Items, h2Items, imp1, imp2 }).ToList();
班级
internal sealed class AssociatedInvoiceRecord
{
public string? AssociatedInvoiceNumber { get; set; }
public string? InvoiceNumber { get; set; }
}
internal sealed class InvoiceHeaderRecord
{
public string? DocumentNumber { get; set; }
}
internal sealed class InvoiceImportDeclarationRecord
{
public string? InvoiceNumber { get; set; }
}
internal sealed class InvoiceItemRecord
{
public string? InvoiceNumber { get; set; }
}
解决方案
您可以使用“或”来合并冗余,但您会丢失发票数据来自发票 1 或发票 2 的上下文。
(from line in associationRecord
join invoice in headers on line.InvoiceNumber equals invoice1.DocumentNumber || line.AssociatedInvoiceNumber equals invoice.DocumentNumber
join item in items on invoice.DocumentNumber equals item.InvoiceNumber into hItems
join impDeclaration in importDeclarations on invoice.DocumentNumber equals impDeclaration.InvoiceNumberinto g
from imp in g.DefaultIfEmpty()
select new { invoice, hItems, imp }).ToList();
推荐阅读
- java - AnnotationException:外键引用的列数错误。应该是 0
- php - 文件上传完成后如何重定向?
- java - 该方法未定义类型 - 多态性
- oracle - 如何修复过时的索引统计信息
- .net-core - 对于 AspNetCore,我在哪里可以获得包含 UseOwn 的扩展?
- node.js - Mongoose NodeJS - 使用 .select 子查询获取查询的属性
- node.js - 如何在express js中进行单程飞行?
- delphi - Delphi:dbgrid 单元格按回车键进入下一个单元格
- aframe - 修复了 Aframe 中的 UI 元素
- math - 查找按词汇顺序总和为给定数字的数千组的第 n 个出现