LINQ Использование Max() для выбора одной строкиC#

Место общения программистов C#
Anonymous
LINQ Использование Max() для выбора одной строки

Сообщение Anonymous »

Я использую LINQ для IQueryable, возвращаемого из NHibernate, и мне нужно выбрать строку с максимальными значениями в нескольких полях.

Я упростил то, на чем настаиваю. Мне нужно выбрать из таблицы одну строку с максимальным значением в одном поле.

var table = new Table { new Row(id: 1, status: 10), new Row(id: 2, status: 20) }

from u in table
group u by 1 into g
where u.Status == g.Max(u => u.Status)
select u


Это неверно, но я не могу подобрать правильную форму.

Кстати, что я такое на самом деле попытка добиться примерно этого:

var clientAddress = this.repository.GetAll()
.GroupBy(a => a)
.SelectMany(
g =>
g.Where(
a =>
a.Reference == clientReference &&
a.Status == ClientStatus.Live &&
a.AddressReference == g.Max(x => x.AddressReference) &&
a.StartDate == g.Max(x => x.StartDate)))
.SingleOrDefault();


Я начал с приведенной выше лямбды, но использовал LINQPad, чтобы попытаться разработать синтаксис для выбора Max().

ОБНОВЛЕНИЕ

Ключевым моментом было удаление GroupBy.

var all = this.repository.GetAll();

var address = all
.Where(
a =>
a.Reference == clientReference &&
a.Status == ClientStatus.Live &&
a.StartDate == all.Max(x => x.StartDate) &&
a.AddressReference == all.Max(x => x.AddressReference))
.SingleOrDefault();


Подробнее здесь: https://stackoverflow.com/questions/911 ... single-row

Вернуться в «C#»