在字典中构建列表(LINQ to SQL)

本文关键字:LINQ to SQL 列表 字典 构建 | 更新日期: 2023-09-27 18:28:42

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

我不确定我需要使用什么扩展方法来获得解决方案。尝试对值字段执行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>>

在字典中构建列表(LINQ to SQL)

您应该使用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());

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])
{
    // ...
}

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

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());