Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ连接-在辅助连接中使用范围变量_C#_.net_Linq - Fatal编程技术网

C#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 {

我试图使用一些linq魔术来查询两个不同的数据集,以比较一个数据集上的内部属性,查看该值是否大于另一个数据集中的属性。我已经概括了类布局并删除了一些属性,希望能让它更清晰

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;