2

C# で SProc を書き直しています。問題は、SProc に次のようなクエリがあることです。

select top 1 *
from ClientDebt
where ClinetID = 11234
order by Balance desc

例: 私には 3 つの借金があるクライアントがいて、それらの残高はすべて同じです。債務 ID は : 1,2,3

そのクエリに相当するc#は次のとおりです。

debts.OrderByDescending(d => d.Balance)
     .FirstOrDefault()

負債は顧客を表す 3 負債

興味深いのは、SQL は Id 2 で負債を返しますが、C# コードは Id 1 を返すことです。ID 1 は私にとって意味があります。

複数の行がクエリに一致する sql top 1 の背後にあるロジックが何であるかわかりません。

クエリは負債を 1 つ選択し、データベースを更新します。linq が sql で同じ結果を返すようにしたい

ありがとう

4

3 に答える 3

1
debts.OrderByDescending(d => d.Balance).ThenByDescending(d => d.Id)
     .FirstOrDefault()
于 2013-03-26T14:33:57.087 に答える
1

SQL プロファイラーを開始し、ストアド プロシージャを実行し、結果を確認してから、アプリケーションが linq を介して送信するクエリをキャッチし、再度結果を確認できます。

また、プロシージャの実行計画を簡単に表示して最適化を試みることもできますが、linq クエリではこれを簡単に行うことはできません。

于 2013-03-26T14:45:43.923 に答える
-2

AFAIK、IN SQLでORDER BYなしで行を選択すると、主キーに基づいて結果セットが並べ替えられます。Order BY CLAUSE [field] を使用すると、暗黙的に次の順序は [primarykey] になります。

于 2013-03-26T14:31:32.827 に答える