Select 属性(内部 SELECT)在带有 GroupBy 的 LINQ 中
Select properties (inner SELECT) in LINQ with GroupBy
我有一个事件列表,这些事件基于它们的 eventId 和 start/end 次是唯一的,但除此之外它们是相同的。因此,例如,我的数据项看起来像这样...
eventItem.EventId
eventItem.EventTypeId
eventItem.StartDateTime
eventItem.EndDateTime
eventItem.Available
eventItem.ShowSystemName
我的数据集看起来像这样...
408277 110 5/26/2021 3:00:00 PM 5/26/2021 3:45:00 PM 100 Event 1
408551 109 5/26/2021 4:00:00 PM 5/26/2021 4:45:00 PM 100 Event 2
408124 110 5/27/2021 10:30:00 AM 5/27/2021 11:15:00 AM 100 Event 1
408398 109 5/27/2021 11:30:00 AM 5/27/2021 12:15:00 PM 100 Event 2
408201 110 5/27/2021 1:00:00 PM 5/27/2021 1:45:00 PM 100 Event 1
408475 109 5/27/2021 2:00:00 PM 5/27/2021 2:45:00 PM 100 Event 2
408278 110 5/27/2021 3:00:00 PM 5/27/2021 3:45:00 PM 100 Event 1
408552 109 5/27/2021 4:00:00 PM 5/27/2021 4:45:00 PM 100 Event 2
我希望从该数据中查询 return 每个唯一事件仅一次(基于 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()))
{
...
}
这让我按预期只得到一次事件,但我正在努力做一个内部 select。
我在 Razor 工作,因为最终这将呈现为 HTML,但由于事件的服务器调用也是我的代码,如果我愿意的话,我可以将此逻辑移至服务调用中任何东西。
谢谢!
GroupBy()
不会 return 事件项目,而是 组 事件项目。具体来说,它是 IGrouping<TKey, TElement>
的 IEnumerable
,其中 TKey
是您分组依据的类型(string
),TElement
是您的事件 class.
您可以使用 IGrouping<TKey, TElement>.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} ...")
}
}
我有一个事件列表,这些事件基于它们的 eventId 和 start/end 次是唯一的,但除此之外它们是相同的。因此,例如,我的数据项看起来像这样...
eventItem.EventId
eventItem.EventTypeId
eventItem.StartDateTime
eventItem.EndDateTime
eventItem.Available
eventItem.ShowSystemName
我的数据集看起来像这样...
408277 110 5/26/2021 3:00:00 PM 5/26/2021 3:45:00 PM 100 Event 1 408551 109 5/26/2021 4:00:00 PM 5/26/2021 4:45:00 PM 100 Event 2 408124 110 5/27/2021 10:30:00 AM 5/27/2021 11:15:00 AM 100 Event 1 408398 109 5/27/2021 11:30:00 AM 5/27/2021 12:15:00 PM 100 Event 2 408201 110 5/27/2021 1:00:00 PM 5/27/2021 1:45:00 PM 100 Event 1 408475 109 5/27/2021 2:00:00 PM 5/27/2021 2:45:00 PM 100 Event 2 408278 110 5/27/2021 3:00:00 PM 5/27/2021 3:45:00 PM 100 Event 1 408552 109 5/27/2021 4:00:00 PM 5/27/2021 4:45:00 PM 100 Event 2
我希望从该数据中查询 return 每个唯一事件仅一次(基于 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()))
{
...
}
这让我按预期只得到一次事件,但我正在努力做一个内部 select。
我在 Razor 工作,因为最终这将呈现为 HTML,但由于事件的服务器调用也是我的代码,如果我愿意的话,我可以将此逻辑移至服务调用中任何东西。
谢谢!
GroupBy()
不会 return 事件项目,而是 组 事件项目。具体来说,它是 IGrouping<TKey, TElement>
的 IEnumerable
,其中 TKey
是您分组依据的类型(string
),TElement
是您的事件 class.
您可以使用 IGrouping<TKey, TElement>.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} ...")
}
}