Linq排序,分组,并返回一个字典
本文关键字:一个 字典 返回 排序 分组 Linq | 更新日期: 2023-09-27 18:04:26
我有一个名为FrameList的自定义对象数组(PONO),我可以orderBy和GroupBy进行排序和分组。但是现在我想返回一个字典,我得到了错误:
(顺便说一句,没有错误是我删除了。todictionary()方法。)
下面是排序和分组的代码片段:错误1 'System.Linq。IGrouping "不包含'type'的定义和'type'的扩展方法接受类型的第一个参数"来。可以找到IGrouping(您是否缺少using指令或程序集参考?)C:'Users'ysg4206'Documents'Visual工作室2010'Projects'Watson' catalogserviceclass 'BuildToby.cs 21 38 Watson
var dict = request.FrameList.OrderBy(f => f.trueDate)
.GroupBy(f => f.type)
.ToDictionary(f => f.type, f => f);
这里是框架列表的定义(它是一个简单的FrameData数组)
[DataContract]
public class FrameData
{
[DataMember]
public String idx { get; set; }
[DataMember]
public String type { get; set; }
[DataMember]
public String path { get; set; }
[DataMember]
public String date { get; set; }
[DataMember]
public DateTime trueDate { get; set; }
}
不清楚你想做什么
如果你只是想创建一个习惯用法的多映射,试试:
var lookup = request.FrameList.ToLookup(f => f.type);
如果你想用Dictionary
类创建一个多映射,试试:
var dict = request.FrameList
.GroupBy(f => f.type)
.ToDictionary(g => g.Key, g => g.ToList());
请注意,在这两种情况下,分组之前的OrderBy
是无用的,因为Lookup和Dictionary本质上是无序集合。如果您想通过订购完成某些任务(也许您希望按日期订购组内的项目?),请澄清,我们可能能够提供更合适的内容。
编辑:根据你的评论,看起来你需要:
var dict = request.FrameList
.GroupBy(f => f.type)
.ToDictionary(g => g.Key,
g => g.OrderBy(f => f.trueDate)
.ToList());
假设你的方法签名是IDictionary<string,IList<FrameData>>
尝试使用下一个代码片段:
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type)
.ToDictionary(f => f.Key, f => f.ToList());
GroupBy操作符返回igrouing对象。这些物体具有Key
性质。但是没有type
属性在分组对象(你的实体的属性):
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type) // this selects IEnumerable<IGrouping>
.ToDictionary(g => g.Key, g => g);
注意:如果这是一个实体关联查询,那么GroupBy
返回IQueryable<IGrouping<TKey, TElement>>