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 查询进行分组?
提前谢谢。
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
的类型并相应地更改您的键值对。