[解決済み] LINQ Max() を使用して 1 つの行を選択する
2022-02-16 08:40:49
質問
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();
解決方法は?
なぜここでグループ化するのかがわかりません。
これを試してみてください。
var maxValue = table.Max(x => x.Status)
var result = table.First(x => x.Status == maxValue);
を反復する別のアプローチ
table
は一度だけです。
var result = table.OrderByDescending(x => x.Status).First();
これは、次のような場合に便利です。
table
が
IEnumerable<T>
は、メモリ上に存在しないか、その場で計算されます。
関連
-
[解決済み] LINQを使用してList<T>から要素を削除する
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] LINQのGroup by
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] LINQ集計アルゴリズム説明
-
[解決済み】LINQを使用してコレクション内のすべてのオブジェクトを更新する
-
[解決済み】groupbyとcountを使ったLINQ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
-
[解決済み】コレクション内の全オブジェクトのプロパティに対して.Max()を実行し、最大値を持つオブジェクトを返す方法【重複】。