Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法返回字典_C#_Linq_Dictionary - Fatal编程技术网

C# 方法返回字典

C# 方法返回字典,c#,linq,dictionary,C#,Linq,Dictionary,我有一个名为Reservation的类,它的属性是StartDate和RoomNumber。然后我有一个预订列表,在其中我使用Linq查找有冲突的预订(冲突意味着预订与列表中的其他预订具有相同的房间号和开始日期) 在下面的代码中,我使用GroupBy方法从列表中查找重复项。但是我需要返回一个字典,因为GroupBy()方法,我不能再返回了。我怎样才能进入预订类 我怎样才能返回字典,因为现在我只能访问date和number属性,而不能访问Reservation类。 班长: return Reser

我有一个名为Reservation的类,它的属性是StartDate和RoomNumber。然后我有一个预订列表,在其中我使用Linq查找有冲突的预订(冲突意味着预订与列表中的其他预订具有相同的房间号和开始日期)

在下面的代码中,我使用GroupBy方法从列表中查找重复项。但是我需要返回一个字典,因为GroupBy()方法,我不能再返回了。我怎样才能进入预订类

我怎样才能返回字典,因为现在我只能访问date和number属性,而不能访问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);

return Reservations.GroupBy(i=>new{i.StartDate,i.RoomNumber})。其中(g=>g.Count)>1)。选择(group=>new{
key=group.key,
value=group.ToList()
}).选择(f=>newdictionary(f.key,f.value);
例如:
如果Id=1的预订与Id=2的预订和Id=3的预订发生冲突,则我的字典将包含Id=1作为关键字的预订,以及包含冲突预订(Id为2和3)的列表更新问题后,您可以使用:
预订房间。
按日期和房间号分组。
要构建(保留、保留列表)的字典,请执行以下代码:

Dictionary<Reservation, List<Reservation>> result = reservations.OrderBy(r => r.Id)
    .GroupBy(x => new { x.StartDate, x.Room.Number })
    .Where(x => x.Count() > 1)
    .ToDictionary(
        x => x.First(),
        y => y.Skip(1).ToList()
    );
结果

Key : Id::1 : Number::2 ==> Values:
Id::2 : Number::2
Id::4 : Number::2
Key : Id::5 : Number::4 ==> Values:
Id::6 : Number::4

我希望这能有所帮助。

返回Reservations.GroupBy(I=>new{I.StartDate,I.RoomNumber})、Where(g=>g.Count>1)、ToDictionary(k=>k.Key,v=>v.ToList());
如果我理解您的意思,您希望使用每个组的一个重复预订作为键,对吗?重复预订中的哪一个(例如,使用max或min StartDate)必须用作键?显示的代码有什么问题?@gameloverr在发布了与冲突的
后,我认为
预订
类还包含
结束日期
Id
房间
,因此这与发布的问题不完全一样。这里有一个问题:如果预订Id=1和Id=2是我的问题n冲突,并给出2个分组保留。那么键将是保留1或保留2?不清楚,您可以在问题中添加具有预期结果的所有类和示例,以帮助我们了解您想要的内容。@gameloverr您可以检查我的答案吗?
foreach(var item in result)
{
    Console.WriteLine($"Key : Id::{item.Key.Id} : Number::{item.Key.Room.Number} ==> Values: ");
    foreach(var item1 in item.Value)
    {
        Console.WriteLine($"Id::{item1.Id} : Number::{item1.Room.Number}");
    }
}
Key : Id::1 : Number::2 ==> Values:
Id::2 : Number::2
Id::4 : Number::2
Key : Id::5 : Number::4 ==> Values:
Id::6 : Number::4