C#LINQ连接-在辅助连接中使用范围变量
我试图使用一些linq魔术来查询两个不同的数据集,以比较一个数据集上的内部属性,查看该值是否大于另一个数据集中的属性。我已经概括了类布局并删除了一些属性,希望能让它更清晰C#LINQ连接-在辅助连接中使用范围变量,c#,.net,linq,C#,.net,Linq,我试图使用一些linq魔术来查询两个不同的数据集,以比较一个数据集上的内部属性,查看该值是否大于另一个数据集中的属性。我已经概括了类布局并删除了一些属性,希望能让它更清晰 public class Contract { public string ContractId { get; set; } public IList<Invoice> InvoiceList { get; set; } public class Invoice {
public class Contract
{
public string ContractId { get; set; }
public IList<Invoice> InvoiceList { get; set; }
public class Invoice
{
public int InvoiceNumber { get; set; }
public decimal CurrentDueAmount { get; set; }
}
}
public class PaymentRequest
{
public IList<ContractList> Contracts { get; set; }
public class ContractList
{
public string ContractId { get; set; }
public IList<InvoiceList> Invoices { get; set; }
}
public class InvoiceList
{
public decimal CurrentDueAmount { get; set; }
}
}
尝试在第二个join语句中使用范围变量“contract”时出错。
我希望能够对物体进行比较。如有任何想法/重构、方法提取等,将不胜感激 在像这样连接这两个集合之前,需要将它们分开
var query =
from valid in (
from contract in validContracts
from invoice in contract.InvoiceList
select new { contract, invoice }
)
join request in (
from contract in paymentRequest.Contracts
from invoice in contract.Invoices
select new { contract, invoice }
)
on new { valid.contract.ContractId, valid.invoice.InvoiceNumber }
equals new { request.contract.ContractId, request.invoice.InvoiceNumber }
where request.invoice.CurrentDueAmount > valid.invoice.CurrentDueAmount
select "Invoice Number: " + request.invoice.InvoiceNumber + ", Current Due >= " + valid.invoice.CurrentDueAmount;
你就是伊万!我不确定我的问题描述是否足够清晰,可以理解,但你做到了。非常感谢!
var query =
from valid in (
from contract in validContracts
from invoice in contract.InvoiceList
select new { contract, invoice }
)
join request in (
from contract in paymentRequest.Contracts
from invoice in contract.Invoices
select new { contract, invoice }
)
on new { valid.contract.ContractId, valid.invoice.InvoiceNumber }
equals new { request.contract.ContractId, request.invoice.InvoiceNumber }
where request.invoice.CurrentDueAmount > valid.invoice.CurrentDueAmount
select "Invoice Number: " + request.invoice.InvoiceNumber + ", Current Due >= " + valid.invoice.CurrentDueAmount;