Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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# 使用GroupBy在LINQ中选择属性(内部选择)_C#_Linq_Razor - Fatal编程技术网

C# 使用GroupBy在LINQ中选择属性(内部选择)

C# 使用GroupBy在LINQ中选择属性(内部选择),c#,linq,razor,C#,Linq,Razor,我有一个基于事件ID和开始/结束时间的唯一事件列表,但在其他方面它们是相同的。例如,我的数据项如下所示 eventItem.EventId eventItem.EventTypeId eventItem.StartDateTime eventItem.EndDateTime eventItem.Available eventItem.ShowSystemName 我的数据集看起来像这样 eventItem.EventId eventItem.EventTypeId eventItem.Sta

我有一个基于事件ID和开始/结束时间的唯一事件列表,但在其他方面它们是相同的。例如,我的数据项如下所示

eventItem.EventId
eventItem.EventTypeId
eventItem.StartDateTime 
eventItem.EndDateTime
eventItem.Available
eventItem.ShowSystemName
我的数据集看起来像这样

eventItem.EventId
eventItem.EventTypeId
eventItem.StartDateTime 
eventItem.EndDateTime
eventItem.Available
eventItem.ShowSystemName
我对该数据的所需查询将仅返回每个唯一事件一次(基于ShowSystemName),然后返回该事件的子项列表。类似于

Event 1
    408277 110 5/26/2021 3:00:00 PM 5/26/2021 3:45:00 PM
    408124 110 5/27/2021 10:30:00 AM 5/27/2021 11:15:00 AM 
    408201 110 5/27/2021 1:00:00 PM 5/27/2021 1:45:00 PM
    408278 110 5/27/2021 3:00:00 PM 5/27/2021 3:45:00 PM
 
Event 2
    408398 109 5/27/2021 11:30:00 AM 5/27/2021 12:15:00 PM
    408475 109 5/27/2021 2:00:00 PM 5/27/2021 2:45:00 PM 
    408552 109 5/27/2021 4:00:00 PM 5/27/2021 4:45:00 PM
    408551 109 5/26/2021 4:00:00 PM 5/26/2021 4:45:00 PM 
我是从

foreach(var eventItem in result.Events.GroupBy(x => x.ShowSystemName).Select(x => x.First()))
{
    ...
}
这让我只能像预期的那样完成每个事件一次,但我正在努力进行内部选择

我在Razor中工作,因为最终它将被呈现为HTML,但由于事件的服务器调用也是我的代码,如果这能给我带来任何好处,我可以将此逻辑移到服务调用中

谢谢

GroupBy()
将不返回事件项,而是返回事件项组。具体来说,它是一个
i分组
s的
i可数
,其中
TKey
是您分组的类型(a
string
),而
TElement
是您的事件类

您可以使用
IGrouping.key
属性访问组的公用键,还可以使用
foreach
对每个组进行迭代

因此,嵌套循环应该可以获得预期的输出:

foreach (var eventGroup in result.Events.GroupBy(x => x.ShowSystemName))
{
    Console.WriteLine(eventGroup.Key);

    foreach (var eventItem in eventGroup)
    {
        Console.WriteLine($"\t{eventItem.EventId} {eventItem.EventTypeId} ...")
    }
}

为什么你需要内部选择呢
GroupBy()
将为您提供每个组的事件列表,以及您所需要的一切。@GoodNightNerdPride-您完全正确!!我完全在考虑这个问题(像往常一样)-您介意创建一个答案,将我的Select更改为(x=>x),然后在System.Linq.Lookup.Grouping中循环吗?我相信你的回答。谢谢看起来我甚至不需要选择(x=>x)。再次感谢!