Элементы внутри сгруппированного результата не сохранят свой порядок. В зависимости от того, как вы хотите учитывать порядок, вам нужно будет сделать это после группы, до и / или после вашего First
...
Чтобы выполнить sh, будет проще, если вы сопоставите отношения в EF со свойствами навигации, а не замените SQL на Linq QL (объединения и т. д.)
Используя следующий базовый запрос:
var query = db.mitgliedschaft
.GroupBy(m => m.Person); // Group by related entity, not ID
Например, после группирования у вас будут наборы записей, сгруппированных по Person. Если вам нужен первый человек с самой ранней связанной записью:
var result = query.OrderByDescending(g => g.Key.mitgliedschafts.Max(stamm => stamm.stammverein)
.ThenBy(stamm => stamm.eintritt.eintrittsdatum)
.First();
Это дикая догадка относительно ваших отношений между схемой и сущностью, но, надеюсь, это поможет вам найти что-то подходящее. Я могу только догадываться, что такое eintritt и как он соотносится с вашей моделью сущности.
Первоначальный запрос берет только ваши базовые сущности, которые вы хотите сгруппировать, и группирует их по связанной сущности. Результатом этой группировки будет набор сгруппированных mitgliedschafts, ключом которого является Person. Чтобы упорядочить эти группы лицом с самыми последними mitgliedschafts, мы используем orderby для связанных mitgliedschafts Ключа, используя значение Max
для коллекции с учетом запроса в порядке убывания.
Затем First
дает нам первая сгруппированная коллекция mitgliedschafts.
Затем, если вы хотите отсортировать итоговый список mitgliedschafts после получения человека с самым последним:
var result = query.OrderByDescending(g => g.Key.mitgliedschafts.Max(stamm => stamm.stammverein)
.ThenBy(stamm => stamm.eintritt.eintrittsdatum)
.First().OrderByDescending(stamm => stamm.stammverein)
.ThenBy(stamm => stamm.eintritt.eintrittsdatum)
.ToList();
2-й набор предложений OrderBy применяется к выбранной группы или mitgliedschafts.
Чтобы создать нужную модель представления, вставьте Select()
, чтобы построить модель представления из mitgliedschafts до ToList()
.
со свойствами навигации. это, вероятно, может быть сделано без обращения к группе. По догадкам, что-то вроде этого должно возвращать что-то похожее:
var query = db.Person
.OrderByDescending(p => p.mitgliedschafts.Max(stamm => stamm.stammverien))
.ThenBy(stamm => stamm.eintritt.eintrittsdatum)
.SelectMany(p => p.mitgliedschafts)
.OrderByDescending(stamm => stamm.stammverien)
.ThenBy(stamm => stamm.eintritt.eintrittsdatum)
.Select(stamm => new { ... })
.ToList();
В любом случае, надеюсь, это даст вам несколько идей о том, что можно попробовать, если у вас есть сопоставленные свойства навигации или вы можете их настроить.