0

我正在尝试构建一个以日期列表作为值的字典。

我不确定我需要使用什么扩展方法来获得解决方案。尝试在值字段上执行 ToList() 但它引发异常。

下面是我正在使用的代码。

    GolfitoDataContext db = new GolfitoDataContext();
    var dic = db.GetTable<History>()
                .Select(p => new { p.Title, p.Date})
                .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter)
                .DistinctBy(x => x.Title)
                .AsEnumerable()
                .ToDictionary(k => k.Title, k => k.Date);

例如对于以下数据

Date                    Title
2013-07-18 22:51:45.000 QA
2013-07-18 22:52:30.000 Controller
2013-07-18 22:52:30.000 Controller
2013-07-18 22:58:00.000 Agent
2013-07-18 23:07:00.000 QA
2013-07-18 23:07:45.000 Controller
2013-07-18 23:08:30.000 Planning

我正在尝试构建一个字典,它将为我提供各个标题(QA、Controller 等)的所有实例及其出现(实例发生的日期)。基本上建立一个Dictionary<string,List<DateTime>>

4

3 回答 3

1

你应该使用GroupBy

var dic = db.GetTable<History>()
            .Select(p => new { p.Title, p.Date})
            .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter)
            .GroupBy(x => x.Title)
            .ToDictionary(g => g.Key, g => g.Select(x => x.Date).ToList());
于 2013-08-23T10:57:26.630 回答
1

ToLookup方法包括:

GolfitoDataContext db = new GolfitoDataContext();
var dic = db.GetTable<History>()
            .Select(p => new { p.Title, p.Date})
            .Where(x => x.Date >= startDateFilter && x.Date <= endDateFilter)
            .ToLookup(k => k.Title, k => k.Date);

查找与多映射基本相同,例如可以用作:

foreach(var date in dic[title])
{
    // ...
}
于 2013-08-23T10:58:17.333 回答
0

您需要在尝试构建字典之前构建列表。您可以通过使用 group by 来做到这一点

var dic = (from x in db.GetTable<History>()
          where x.Date >= startDateFilter && x.Date <= endDateFilter
          group x.Date by x.Title)
         .ToDictionary(grp => grp.Key, grp.ToList());
于 2013-08-23T11:00:23.470 回答