Vb.net 组或联合实体框架对象以返回每个组的单个对象?

Vb.net 组或联合实体框架对象以返回每个组的单个对象?,vb.net,entity-framework,Vb.net,Entity Framework,我想知道这在EF6、vb.net中是否可能实现 我的模型包含用于提醒的对象,对于一个给定的提醒,我可以在数据集中有许多对象/行,通常针对针对特定事件发送的每种类型的提醒都有一个对象/行 关于我的数据集的想法将包括以下类似内容: | ObjectID (PK) | EventID (FK) | EventType (Enum) | Outcome (Enum) | | 11111 | 1234 | SMS | P

我想知道这在EF6、vb.net中是否可能实现

我的模型包含用于提醒的对象,对于一个给定的提醒,我可以在数据集中有许多对象/行,通常针对针对特定事件发送的每种类型的提醒都有一个对象/行

关于我的数据集的想法将包括以下类似内容:

| ObjectID (PK) | EventID  (FK)   | EventType (Enum) |     Outcome (Enum) |
| 11111         | 1234            | SMS              |     Pending        |
| 11112         | 1234            | Email            |     Complete       |
| 11113         | 5678            | Email            |     Complete       |
每个对象都有一个唯一的PK和一个将相关提醒对象分组在一起的事件ID。我正试图通过EventID将项目合并或分组在一起,这样每个唯一的EventID都会返回一个对象到UI,并将所有EventType返回到一个对象中,该对象可以由UI中的网格绑定到

预期产出:

Row 1: 1234  |  SMS Email | Pending Complete|
Row 2: 5678  | Email   | Complete |
所以我开始尝试在我的查询中解决这个问题:

 Dim SomeEvents = (select from db.reminders).GroupBy(Function(g) g.EventID).Select(Function(s) 
s.first()).ToEnumerable()
我可以按EventID对它们进行分组,然后抓取第一行,但我不知道如何抓取相关项,是否可以从EF查询中执行此操作并返回到匿名类型

.Select(Function(s) New With {Key .EventID = s.EventID, 
     Key .Outcome = "Pending", "Complete" })
我无法确定如何以匿名类型的枚举/字符串/etc列表形式返回EventType或结果

这可能吗

另一种方法是创建一个数据传输对象类,从模型中选择对象,从DTO中选择新对象,并将其返回到UI,这是相当多的工作,并且我没有尝试实现任何业务逻辑,只是尝试将项目表示为一行而不是多行

我忘了VB,但是

Dim SomeEvents = (select from db.reminders).GroupBy(Function(g) g.EventID).Select(Function(s) {Key .EventID = g.Key, Key .Outcome = String.Join("|", g.ToList()) } ).ToEnumerable()
此外,如果需要,还可以添加其他
“|”

“|”+String.Join(“|”,g.ToList())+“|”

您不希望有一个类似于
SMS(挂起)|电子邮件(完成)
的输出吗。现在很容易失去类型和结果之间的关系。@GertArnold是的-但我无法确定在按…分组后如何选择匿名类型仍然有一个问题:在使用{Key.EventID s.EventID}新生成的anon对象中,它不允许我选择s.EventID或g.EventID(EventID不是IGrouping的成员)(关于Guid?,Remidners)