jeandavid Ответов: 1

Как получить ребенка с максимальным значением в LINQ?


Всем привет,

Я использую Entity Framework и у меня есть следующий код:

var query = this._dbContext.Set<Parent>()
                .AsNoTracking()
                .Where(p => p.IsActive.Value)
                .Include(child=> p.Children)
                as IQueryable<Parent>;


Это дало бы мне всех детей. Кроме того, у детей есть свойство с именем VersionNumber. Как я должен отредактировать приведенный выше запрос, чтобы он возвращал только один дочерний элемент, который имеет максимальное значение VersionNumber.

Пожалуйста, обратите внимание, что VersionNumber - это INT, увеличенный на 1, для каждой записи ребенка для каждого родителя.
Родитель Ребенок Ребенок.Номер_версии
1 1 1
1 2 2
2 1 1
2 1 2

Большое спасибо за вашу помощь

Что я уже пробовал:

Я пробовал различные вещи, такие как использование метода загрузки. Я также заметил, что предложение Include не может иметь where внутри

1 Ответов

Рейтинг:
5

Graeme_Grant

Вам нужно сгенерировать ключ для упорядочения результатов, чтобы найти наибольшее значение [max]. Что-то вроде:

var query1 = new List<List<int>>
{
    new List<int> { 1,1,1},
    new List<int> { 1,2,2},
    new List<int> { 1,1,1},
    new List<int> { 2,1,1},
    new List<int> { 2,1,2}
};

var query2 = query1.GroupBy(x => string.Join("", x))
                   .OrderByDescending(x => x.Key)
                   .First();

Но вам также нужно "защитить будущее" от невыровненных чисел, что приведет к чему-то вроде этого:
var query2 = query1.GroupBy(x => string.Join("", x.Select(y => y.ToString().PadLeft(4, '0'))))
                   .OrderByDescending(x => x.Key)
                   .First();