我想知道这在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()) + "|"