在字典中构建列表(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>>
您应该使用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());