Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 字典无法从'&书信电报;匿名类型>';_C#_Linq_Group By - Fatal编程技术网

C# 字典无法从'&书信电报;匿名类型>';

C# 字典无法从'&书信电报;匿名类型>';,c#,linq,group-by,C#,Linq,Group By,这是我的密码: var groupedDataDictionary = products .Where(p => p.ProductType == ProductType.ValueType) .GroupBy(p => (p.OfficeDebitId, p.OfficeDebitDate, p.PaymentMethod)) .ToDictionary(x => x.Key, x => x.Sum(p => p.Amount)); v

这是我的密码:

var groupedDataDictionary = products
    .Where(p => p.ProductType == ProductType.ValueType)
    .GroupBy(p => (p.OfficeDebitId, p.OfficeDebitDate, p.PaymentMethod))
    .ToDictionary(x => x.Key, x => x.Sum(p => p.Amount)); 

var result = products.Select(p => new ResponseDto()
    {
        customer_id = p.CustomerId, 
        office_debit_date = p.OfficeDebitDate.Value.ToString(),
        office_debit_id = p.OfficeDebitId.ToString(),
        office_debit_total = groupedDataDictionary[new { p.OfficeDebitId, p.OfficeDebitDate, p.PaymentMethod }].Sum().ToString(), // this line causes error
        payment_method = p.PaymentMethod.Value.ToString(),
    }).ToList();
当在该行分配
办公室\借方\总计时,它会显示:

错误CS1503参数1:无法从
'
转换为
'(字符串
OfficeDebitId,System.DateTime?OfficeDebitDate,
Enumerations.PaymentMethod?PaymentMethod)


您应该使用
元组
匿名类型
,但不要组合它们。如果要对键使用
元组
,则还应使用
元组
按键获取字典值:

var result = products.Select(p => new ResponseDto()
    {
        customer_id = p.CustomerId, 
        office_debit_date = p.OfficeDebitDate.Value.ToString(),
        office_debit_id = p.OfficeDebitId.ToString(),

        // Here you should use Tuple to get value by Key.
        office_debit_total = groupedDataDictionary[(p.OfficeDebitId, p.OfficeDebitDate, p.PaymentMethod)].ToString(),

        payment_method = p.PaymentMethod.Value.ToString(),
    }).ToList();

还请注意,我删除了对方法
Sum()
的调用,因为dictionary
groupedDataDictionary
已经包含聚合数据:
x.Sum(p=>p.Amount)

我建议使用元组作为键。@John您能提供一个示例吗,如何?Thanksor使用值元组语法
GroupBy(p=>(p.OfficeDebitId,p.OfficeDebitDate,p.PaymentMethod))
这个问题类似吗?@PavelAnikhouski这是另一个问题,无法添加重复的键,这就解决了