LINQ:如何将复合 LINQ 结果转换为字典

本文关键字:LINQ 转换 字典 结果 复合 | 更新日期: 2023-09-27 18:35:13

我尝试使用 LINQ 对将要使用的数据进行排序到报表中。报告结构如下所示:


开发者名称

日期 |营业时间 |项目名称 |周末
日期 |营业时间 |项目名称 |周末
日期 |营业时间 |项目名称 |周末

开发者名称

日期 |营业时间 |项目名称 |周末
日期 |营业时间 |项目名称 |周末

开发者名称

日期 |营业时间 |项目名称 |周末
日期 |营业时间 |项目名称 |周末
日期 |营业时间 |项目名称 |周末


我正在从.dbml文件中获取所有这些数据。对于这样的排序,我有这个 linq 查询:

DataClasses1DataContext context = new DataClasses1DataContext();
        System.Data.Linq.ISingleResult<s_SummaryReportResult> res = context.s_timesheet_SummaryReport(startDate, endDate);
        var orb = from c in res
                  group c by c.developer
                  into devgroup
                  select new 
                  {   
                      Dev = devgroup.Key,
                      devData = from o in res
                                      select new {
                                        o.Date,
                                        o.Hours,
                                        o.projectname,
                                        o.week_ending
                                      }};
IDictionary dic_orb = orb.ToDictionary(result => result.Dev.ToString(), result => result.devData);

        foreach (KeyValuePair<string, object> item in dic_orb)
        {
          object brr =  item.Value;
        }

可悲的是,在foreach步骤中,我得到了一个"InvalidCastException"。

关于如何解决该问题的任何线索,或者从某种意义上说,如何更好地对 LINQ 查询进行分组?

提前谢谢。

LINQ:如何将复合 LINQ 结果转换为字典

dic_orb是一个Dictionary<string, IEnumerable<'a>>,其中'a是查询中定义的匿名类型。类型 KeyValuePair<string, IEnumerable<'a>> 不可转换为 KeyValuePair<string, object>因此强制转换无效。解决方法是在foreach循环中使用 var 声明item

foreach (var item in dic_orb)
{
    object brr =  item.Value;
}

由于item.Value是一个IEnumerable<'a>

您可以使用
var brr = item.Value;
foreach(var b in brr)
{
}

如果只想迭代所有嵌套集合,则可以使用

foreach(var b in dic_orb.SelectMany(kvp => kvp.Vaue))
{
}

你确定 result.devData 是 object 型吗?

只需更改

foreach (KeyValuePair<string, object> item in dic_orb)

foreach (var item in dic_orb)

您应该自动获得正确的类型。否则,请检查devData的类型并相应地更改您的键值对。