组或联合实体框架对象是否为每个组返回单个对象?



我想知道这在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 将项目合并或分组在一起,以便为每个唯一事件 ID 返回一个对象,将所有事件类型返回到一个对象,该对象可以通过 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" })

我无法弄清楚如何将事件类型或结果作为匿名类型的枚举/字符串/等列表返回。

这可能吗?

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

我忘记了 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()) + "|"

最新更新