C# System.ArgumentNullException:';值不能为null。参数名称:key';

C# System.ArgumentNullException:';值不能为null。参数名称:key';,c#,linq,C#,Linq,我当前在分组逻辑中遇到错误。我正在尝试对EMV中相同的productnames的值求和。我只传递一些列表时出错。如何避免此异常。我不知道在linq Expersion中执行空检查 System.ArgumentNullException: 'Value cannot be null. Parameter name: key' 代码 公共字典SumProductEmv(IEnumerable allProducts) { if(allProducts==null) 返回null; 退回所有产品

我当前在分组逻辑中遇到错误。我正在尝试对EMV中相同的productnames的值求和。我只传递一些列表时出错。如何避免此异常。我不知道在linq Expersion中执行空检查

System.ArgumentNullException: 'Value cannot be null. Parameter name: key'
代码

公共字典SumProductEmv(IEnumerable allProducts)
{
if(allProducts==null)
返回null;
退回所有产品
.GroupBy(产品=>product.ProductName)
.选择(组=>新建
{
ProductName=group.Key,//这是您在ProductName上分组的值
EmvSum=group.Sum(item=>item.Emv)
})
.ToDictionary(x=>x.ProductName,x=>x.EmvSum);
}

您可以使用
Where
过滤
null
或空键,请尝试以下操作:

return allProducts
    .Where(product => !string.IsNullOrEmpty(product.ProductName))
    .GroupBy(product => product.ProductName)
    .Select(group => new
    {
        ProductName = group.Key, // this is the value you grouped on - the ProductName
        EmvSum = group.Sum(item => item.Emv)
    })
    .ToDictionary(x => x.ProductName, x => x.EmvSum);


此外,您还可以使用
Distinct()
来防止ArgumentException:字典中已经存在具有相同键的元素,但是您需要决定要使用哪个元素,第一个、最后一个等。

您可以使用
Where
过滤
null
或空键,请尝试以下操作:

return allProducts
    .Where(product => !string.IsNullOrEmpty(product.ProductName))
    .GroupBy(product => product.ProductName)
    .Select(group => new
    {
        ProductName = group.Key, // this is the value you grouped on - the ProductName
        EmvSum = group.Sum(item => item.Emv)
    })
    .ToDictionary(x => x.ProductName, x => x.EmvSum);


此外,您还可以使用
Distinct()
来防止ArgumentException:字典中已存在具有相同键的元素,但随后您需要确定要采用的元素,如第一个、最后一个等。

推测
ProductName
为空。我想象一个
。其中
在group by之前可以解决这个问题。大概
ProductName
是空的。我想象一个
。在小组成员解决这个问题之前。