1

我有一个名为 FrameList 的自定义对象 (PONO) 数组,我可以通过 orderBy 和 GroupBy 进行排序和分组。但是现在我想返回一个字典,我得到了错误:

(顺便说一句,没有错误是我删除了 .ToDictionary() 方法。)

错误 1“System.Linq.IGrouping”不包含“类型”的定义,并且找不到接受“System.Linq.IGrouping”类型的第一个参数的扩展方法“类型”(您是否缺少 using 指令或程序集参考?) C:\Users\ysg4206\Documents\Visual Studio 2010\Projects\Watson\CatalogServiceClasses\BuildToby.cs 21 38 Watson

这是排序和分组的片段:

    var dict = request.FrameList.OrderBy(f => f.trueDate)
        .GroupBy(f => f.type)
        .ToDictionary(f => f.type, f => f);

这是 FrameList 的定义(这是一个简单的 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; }
}
4

3 回答 3

4

目前尚不清楚您要做什么。

如果您只是想创建一个惯用的多地图,请尝试:

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());
于 2013-03-18T16:39:53.503 回答
2

假设您的方法签名是IDictionary<string,IList<FrameData>>

尝试使用下一个代码片段:

var dict = request.FrameList
    .OrderBy(f => f.trueDate)
    .GroupBy(f => f.type)
    .ToDictionary(f => f.Key, f => f.ToList());
于 2013-03-18T16:35:26.807 回答
1

GroupBy 运算符返回IGrouping对象。这些对象具有Key属性。但是分组对象没有type属性(它的实体属性):

 var dict = request.FrameList
        .OrderBy(f => f.trueDate)
        .GroupBy(f => f.type) // this selects IEnumerable<IGrouping>
        .ToDictionary(g => g.Key, g => g);

注意:如果这是一个 Linq to Entities 查询,则GroupBy返回IQueryable<IGrouping<TKey, TElement>>

于 2013-03-18T16:36:34.163 回答