NHibernateから返されたIQueryableでLINQを使用しており、いくつかのフィールドで最大値を持つ行を選択する必要があります。
固執している部分を簡略化しました。テーブルから1つのフィールドの最大値を持つ1つの行を選択する必要があります。
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();
可能性の重複:stackoverflow.com/questions/1101841/...
—
M.Babcock
@M。バブコックはその質問のかなり下に良い答えがありました:stackoverflow.com/a/6330485/444244
—
ボギン
それよりずっと良いものがあります...
—
M.バブコック