Группировать или объединять объекты Entity Framework, чтобы возвращать отдельный объект для каждой группы? - PullRequest
0 голосов
/ 26 января 2020

Мне интересно, возможно ли это даже в EF6, vb. net

Моя модель содержит объекты для напоминаний, для одного данного напоминания у меня может быть много объектов / строк в наборе данных, обычно один для каждого типа напоминания, которое было отправлено для этого конкретного события.

Идея моего набора данных будет включать следующее:

| ObjectID (PK) | EventID  (FK)   | EventType (Enum) |     Outcome (Enum) |
| 11111         | 1234            | SMS              |     Pending        |
| 11112         | 1234            | Email            |     Complete       |
| 11113         | 5678            | Email            |     Complete       |

Каждый объект имеет уникальный PK и идентификатор события, который группирует связанные объекты напоминания. Я пытаюсь объединить или сгруппировать элементы по EventID так, чтобы один объект возвращался в пользовательский интерфейс для каждого уникального eventID, возвращая все eventTypes в один объект, который может быть связан сеткой в ​​пользовательском интерфейсе.

Ожидаемый результат:

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" })

Я не могу понять, как вернуть EventTypes или Outcomes как список перечислений / строк / et c в анонимном типе.

Возможно ли это вообще?

Другой подход заключается в создании класса объекта передачи данных, выбирая объекты из модели в новые объекты из DTO и вернуть их в пользовательский интерфейс, это значительно больше работы, и нет никакой бизнес-логики c Я пытаюсь реализовать, просто пытаюсь представить элементы как 1 ряд в отличие от нескольких рядов.

1 Ответ

0 голосов
/ 26 января 2020

Я забыл 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()) + "|"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...