【发布时间】:2014-10-20 19:43:24
【问题描述】:
这是我的代码:
IEnumerable<ServiceTicket> troubletickets = db.ServiceTickets.Include(t => t.Company).Include(t => t.UserProfile);
var ticketGroups = new Dictionary<string, List<ServiceTicket>>();
ticketGroups = troubletickets
.GroupBy(o => o.DueDate).ToDictionary(
group => {
var firstOrDefault = @group.FirstOrDefault();
return firstOrDefault != null
? firstOrDefault.DueDate.HasValue
? firstOrDefault.DueDate.Value.ToShortDateString()
: ""
: "";
},
group => group.ToList()
).OrderBy(g => g.Key).ToDictionary(g => g.Key, g => g.Value);
我得到的错误是:“已添加具有相同密钥的项目。”这是因为 DueDate 值偶尔会重复。我的问题是,如果字典中已经存在密钥,我该如何防止它被添加?
【问题讨论】:
-
与其使用
ToDictionary(),不如遍历查询中的项目并自己构建字典。你甚至可以创建自己的可枚举扩展ToDictionaryWithDuplicatedKeys()。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
您也可以使用HashSet - 添加重复键是可能的,但集合只包含该项目一次。但是像已经建议的那样应用 Distinct 可能会更容易。
-
好吧,我正在尝试按日期对门票进行分组。例如。我想在 2014 年 10 月 20 日之前对所有票进行分组。所以,我想维护该组内的票。我试过 .GroupBy(o => o.DueDate).Distinct().ToDictionary()
标签: c# asp.net-mvc entity-framework dictionary