C# 使用GroupBy在LINQ中选择属性(内部选择)
我有一个基于事件ID和开始/结束时间的唯一事件列表,但在其他方面它们是相同的。例如,我的数据项如下所示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
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
是您分组的类型(astring
),而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)。再次感谢!