Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq - Fatal编程技术网

C# Linq语句问题

C# Linq语句问题,c#,linq,C#,Linq,我有以下代码,我想将for eaches转换成一个linq语句 decimal originalCharges = 0; List<int> rdns = new List<int>() { 1, 2 }; foreach (var customerOrder in list) { foreach (Cus

我有以下代码,我想将for eaches转换成一个linq语句

        decimal originalCharges = 0;
        List<int> rdns = new List<int>()
        {
            1,
            2
        };
        foreach (var customerOrder in list)
        {
            foreach (CustomerBillTo billTo in customerOrder.BillTos)
            {
                originalCharges += billTo.Charges
                    .Where(charge => rdns.Contains(charge.RateCodeRdn))
                    .Sum(charge => charge.Amount);
            }
        }
这给了我一个错误,无法将类型“void”转换为“decimal”

我想我对如何处理原始电荷的+=感到困惑,就像我在第一个示例中的原始forEach循环中所做的那样

这可以在linq语句中完成吗

originalCharges = list.ForEach(co => co.BillTos.ForEach( ));

您只需将费用金额投影到并平铺,然后将其相加

var originalCharges =
    (from customerOrder in list
    from billTo in customerOrder.BillTos
    from charge in billTo.Charges
    where rdns.Contains(charge.RateCodeRdn)
    select charge.Amount).Sum();
或者,如果您更喜欢流利的方法:

var originalCharges =
    list.SelectMany(customerOrder =>
        customerOrder.BillTos.SelectMany(billTo =>
            billTo.Charges
                .Where(charge => rdns.Contains(charge.RateCodeRdn))
                .Select(charge => charge.Amount)
        )
    ).Sum();
A将很有帮助,这样我们可以确保提出的解决方案产生相同的结果。
var originalCharges =
    list.SelectMany(customerOrder =>
        customerOrder.BillTos.SelectMany(billTo =>
            billTo.Charges
                .Where(charge => rdns.Contains(charge.RateCodeRdn))
                .Select(charge => charge.Amount)
        )
    ).Sum();