【发布时间】:2020-04-23 15:26:36
【问题描述】:
我有一个名为 Reservation 的类,它具有 StartDate 和 RoomNumber 属性。然后我有一个 Reservations 列表,我在其中使用 Linq 查找有冲突的预订(冲突意味着预订与列表中的其他预订具有相同的房间号和开始日期)
在以下代码中,我使用 GroupBy 方法从列表中查找重复项。但是我需要返回一个 Dictionary ,因为 GroupBy() 方法我不能再这样做了。如何访问 Reservation 类?
我怎样才能返回 Dictionary,因为现在我只能访问日期和数字属性,而不是 Reservation 类。 主类:
return Reservations.GroupBy(i => new {i.StartDate, i.RoomNumber}).Where(g => g.Count)>1).Select(group => new {
key=group.Key,
value=group.ToList()
}).Select(f => new Dictionary <Reservation, List<Reservation>> (f.key, f.value);
例如: 如果 Id=1 的 Reservation 与 Id=2 的 Reservation 和 Id=3 的 Reservation 有冲突,那么我的字典将包含 Id=1 作为键的 Reservation 和一个包含冲突保留的列表(Id 2 和 3)
【问题讨论】:
-
return Reservations.GroupBy(i => new {i.StartDate, i.RoomNumber}) .Where(g => g.Count > 1) .ToDictionary(k=>k.Key, v=>v.ToList()); -
如果我理解你的话,你想使用每个组的重复预订中的一个作为键,对吧?哪些重复保留(例如,最大或最小 StartDate)必须用作键?
-
显示的代码有什么问题?
-
@gameloverr 在发布
ConflictsWith之后我认为Reservation类还包含EndDate、Id和Room,所以这不完全是像问题一样发布的内容吗?这里有一个问题:如果reservation id=1 和Id=2 发生冲突并给出2 个分组reservation。所以关键是保留1或2?不清楚,您可以在问题中添加所有具有预期结果的类和示例,以帮助我们了解您想要什么。
标签: c# linq dictionary