将项目合并为在同一列表中重复的项目

时间:2014-01-31 19:39:33

标签: c# vb.net linq linq-to-entities

我在数据库中有一个查询,它返回一个对象列表(在我的情况下是通知),但该列表带来了很多重复的项目(通知可以包含多个附件,所以查询的作用是加入附件表,带回了很多重复的通知,一个带有很多附件的通知)。所以我想要实现的是将一个特定通知ID的所有附件合并到一个项目中(假设我的通知类有一个附件列表) 我这样做了:

Dim dupes = list.GroupBy(Function(x) x.Notification.NotifiedID)
                .Select(Function(s) s.ToList())
                .ToList()

但我不知道如何合并分组的,有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

在c#

中试试
list.GroupBy(x=> x.Notification.NotifiedID).SelectMany(o=> o);

我不知道VB但你可以试试这个

Dim dupes = list.GroupBy(Function(x) x.Notification.NotifiedID)
                .SelectMany(Function(s) s)
                .ToList()

答案 1 :(得分:1)

分组后,然后从每组中选择第一个:

var firstNotifiedItems = list.GroupBy(x=> x.Notification.NotifiedID).Select(g=> g.First()).ToList();

这将为每个notifyID提供一个项目。

但是,如果您想要新对象中的所有项目:

var notifiedItems = list.GroupBy(x=> x.Notification.NotifiedID).Select(g=> new{NotifiedID=g.First().NotifiedID, Items=g.ToList()}).ToList();

这将为您提供一个带有NotifiedID的对象以及该ID的项目列表。

相关问题