[解決済み] 最大値かデフォルトか?
2022-04-22 18:04:25
質問
行を返さないLINQクエリからMax値を取得する最良の方法は何でしょうか?もし私が
Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter).Max
クエリが行を返さない場合、エラーが発生します。私は次のようにすることができます。
Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select y.MyCounter _
Order By MyCounter Descending).FirstOrDefault
しかし、このような単純な要求には少し鈍重な感じがします。もっと良い方法があるのでしょうか?
UPDATE: 以下、裏話です。私は子テーブルから次の資格カウンターを取得しようとしています(レガシーシステム、私を始めないでください...)。各患者の最初の資格行は常に1であり、2番目は2、などです。(明らかに、これは子テーブルの主キーではありません)。そこで、患者の既存のカウンタ値の最大値を選択し、それに1を追加して新しい行を作成しています。既存の子値がない場合、クエリは 0 を返す必要があります (したがって、1 を追加するとカウンタ値は 1 になります)。レガシー・アプリケーションがカウンタ値にギャップをもたらす(可能性がある)場合に備えて、子行の生のカウントに頼りたくないということに注意してください。質問を一般的なものにしようとした私が悪いのですが。
どのように解決するのですか?
以来
DefaultIfEmpty
はLINQ to SQLで実装されていないので、それが返すエラーで検索してみると
魅惑的な記事
は、集約関数におけるヌルセットについて扱っています。私が見つけたことを要約すると、select の中で nullable にキャストすることで、この制限を回避することができます。私のVBは少し錆びついていますが、私は
思う
こんな感じです。
Dim x = (From y In context.MyTable _
Where y.MyField = value _
Select CType(y.MyCounter, Integer?)).Max
あるいはC#で。
var x = (from y in context.MyTable
where y.MyField == value
select (int?)y.MyCounter).Max();
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] LINQ Max() を使用して 1 つの行を選択する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である