C# Linq排序、分组和返回字典
我有一个名为FrameList的自定义对象数组,我可以通过orderBy和GroupBy进行排序和分组。但是现在我想返回一个字典,我得到了一个错误: 顺便说一句,删除.ToDictionary方法没有错误 错误1“System.Linq.iGroup”不存在 不包含“type”的定义,也不包含扩展方法“type” 接受类型为的第一个参数 找不到“System.Linq.IGrouping” 是否缺少using指令或程序集 参考C:\Users\ysg4206\Documents\Visual Studio 2010\Projects\Watson\CatalogServiceClasses\BuildToby.cs 21 38 Watson 以下是排序和分组的代码段:C# Linq排序、分组和返回字典,c#,linq,todictionary,C#,Linq,Todictionary,我有一个名为FrameList的自定义对象数组,我可以通过orderBy和GroupBy进行排序和分组。但是现在我想返回一个字典,我得到了一个错误: 顺便说一句,删除.ToDictionary方法没有错误 错误1“System.Linq.iGroup”不存在 不包含“type”的定义,也不包含扩展方法“type” 接受类型为的第一个参数 找不到“System.Linq.IGrouping” 是否缺少using指令或程序集 参考C:\Users\ysg4206\Documents\Visual S
var dict = request.FrameList.OrderBy(f => f.trueDate)
.GroupBy(f => f.type)
.ToDictionary(f => f.type, f => f);
下面是框架列表的定义,它是一个简单的框架数据数组
[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; }
}
假设您的方法签名是IDictionary 尝试使用下一个代码段:
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type)
.ToDictionary(f => f.Key, f => f.ToList());
假设您的方法签名是IDictionary 尝试使用下一个代码段:
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type)
.ToDictionary(f => f.Key, f => f.ToList());
GroupBy操作符返回对象。这些对象具有密钥属性。但分组对象上没有类型属性,它是您实体的属性:
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type) // this selects IEnumerable<IGrouping>
.ToDictionary(g => g.Key, g => g);
注意:如果这是一个Linq到实体的查询,那么GroupBy返回IQueryableGroupBy操作符返回对象。这些对象具有密钥属性。但分组对象上没有类型属性,它是您实体的属性:
var dict = request.FrameList
.OrderBy(f => f.trueDate)
.GroupBy(f => f.type) // this selects IEnumerable<IGrouping>
.ToDictionary(g => g.Key, g => g);
注意:如果这是一个Linq到实体的查询,那么GroupBy返回IQueryable不清楚您要做什么 如果您只是想创建一个惯用的多重映射,请尝试:
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都是无用的,因为查找和字典本身就是无序集合。如果您试图通过订购完成一些事情,也许您希望在某个组中的项目按日期?订购,请澄清,我们可能能够提供更合适的产品
编辑:根据您的评论,您需要:
var dict = request.FrameList
.GroupBy(f => f.type)
.ToDictionary(g => g.Key,
g => g.OrderBy(f => f.trueDate)
.ToList());
不清楚你想做什么 如果您只是想创建一个惯用的多重映射,请尝试:
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都是无用的,因为查找和字典本身就是无序集合。如果您试图通过订购完成一些事情,也许您希望在某个组中的项目按日期?订购,请澄清,我们可能能够提供更合适的产品
编辑:根据您的评论,您需要:
var dict = request.FrameList
.GroupBy(f => f.type)
.ToDictionary(g => g.Key,
g => g.OrderBy(f => f.trueDate)
.ToList());
.ToDictionaryf=>f.Key,f=>f I分组将按类型将元素分组到键中。.ToDictionaryf=>f.Key,f=>f I分组将按类型将元素分组到键中。@lazyberezovsky我被答案的注释弄糊涂了:@lazyberezovsky我被答案的注释弄糊涂了:是的,这就是我要找的。非常感谢。OrderBy不需要对组或命令元素进行排序,而是每个键处的列表都是按日期排序的列表。这就是我要找的。非常感谢。OrderBy不需要对组或命令元素进行排序,而是每个键处的列表都是按日期排序的列表。这就是诀窍。