Я використовую 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();