Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# 使用Qroupped数据中的linq的条件平均值不返回任何结果_C#_Linq_Group By_Where - Fatal编程技术网

C# 使用Qroupped数据中的linq的条件平均值不返回任何结果

C# 使用Qroupped数据中的linq的条件平均值不返回任何结果,c#,linq,group-by,where,C#,Linq,Group By,Where,我正在使用linq计算数据中一个字段的平均值。我希望将结果按其他两个字段分组 var Table3 = from d in table1sum.Concat(table2sum) group d by new { d.Field1, d.Field2 } into dg let AverageField3 = dg.Where(g => g.Field3 > 0.0).Average(g => g.Field3) let Field4Sum = dg.Sum(g

我正在使用linq计算数据中一个字段的平均值。我希望将结果按其他两个字段分组

var Table3 = from d in table1sum.Concat(table2sum)
group d by new { d.Field1, d.Field2 } into dg
    let AverageField3 = dg.Where(g => g.Field3 > 0.0).Average(g => g.Field3)
    let Field4Sum = dg.Sum(g => g.Field4)
    let Field5Sum = dg.Sum(g => g.Field5)
    let Field6Sum = dg.Sum(g => g.Field6)
select new
{
    SupplierID = dg.Key.Field1,
    PropertyID = dg.Key.Field2,
    AverageField3,
    Field4Sum,
    Field5Sum,
    Field6Sum
 };
原始数据是

Table1Sum
    Field1  |Field2 |Field3 |Field4     |Field5 |Field6
    3       |3      |48,00  |3019,00    |603,80 |0,00
    3       |4      |51,00  |3144,00    |628,80 |0,00
    3       |5      |49,00  |3085,00    |617,00 |0,00
    3       |5      |49,00  |3062,00    |612,40 |0,00
    3       |7      |30,00  |42,00      |8,40   |0,00


Table2Sum
    Field1  |Field2 |Field3 |Field4     |Field5 |Field6
    6       |4      |0,00   |0,00       |0,00   |959,80
    4       |7      |0,00   |0,00       |0,00   |529,25
    1       |3      |0,00   |0,00       |0,00   |1730,45
    1       |7      |0,00   |0,00       |0,00   |2127,21
    2       |5      |0,00   |0,00       |0,00   |239,63
    1       |5      |0,00   |0,00       |0,00   |867,23
    6       |3      |0,00   |0,00       |0,00   |501,20
    2       |3      |0,00   |0,00       |0,00   |354,63
    3       |4      |0,00   |0,00       |0,00   |541,54
    3       |3      |0,00   |0,00       |0,00   |683,85
    6       |5      |0,00   |0,00       |0,00   |511,73
    4       |5      |0,00   |0,00       |0,00   |1023,17     
由于某种原因,我得到错误“序列不包含元素”

我想要的是

Table3
    Field1  |Field2 |Field3 |Field4     |Field5     |Field6
    3       |3      |48,00  |3019,00    |603,80     |683,85
    3       |4      |51,00  |3144,00    |628,80     |541,54
    3       |5      |49,00  |6147,00    |1229,40    |0,00
    3       |7      |30,00  |42,00      |8,40       |0,00
如何更改我的linq查询以获得正确的数据

编辑:一些问题和评论的答案


“Field1”在real live中还有3以外的其他值。这恰好是我此时的测试数据。

听起来好像有些组没有任何满足
Where
条件的项目。不可为空值序列的
平均值
不是零-这是一个例外。例如,
Field1
6
中没有
Field3
大于零的项

我注意到在您的“我想要什么”表中,您只有
Field1
3
的值-如果这代表您的真实场景,可能会过滤第二个表

一种可能的修复方法是将值投影为可为空:

let AverageField3 = dg.Where(g => g.Field3 > 0.0).Average(g => (int?)g.Field3)
当没有任何输入时,这将给出一个
null
值。如果您想要零:

let AverageField3 = dg.Where(g => g.Field3 > 0.0)
                      .Average(g => (int?)g.Field3)
                      .GetValueOrDefault();

(将
int?
替换为
float?
decimal?
或与您的数据匹配的任何内容)

我很好奇如何使用带平均值的可空值克服序列问题?我可能需要去看看资料来源。好的,找到了。今天学到了一些新东西,谢谢。@Nkosi或查看文档;与“值序列的平均值,如果源序列为空或仅包含空值,则为空。”与“值序列的平均值”形成对比。记录的异常为“InvalidOperationException源不包含任何元素”。@Nkosi btw;现在你最好使用corefx源代码:谢谢你的提示。基本上有另一个链接作为快速书签,可以快速查找api参考源。