簡體   English   中英

SQL Top 1與System.Linq firstordefault

[英]sql Top 1 vs System.Linq firstordefault

我正在用C#重寫SProc。 問題是在SProc中有這樣的查詢:

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

例如:我有一個有3筆債務的客戶,他們所有人都有相同的余額。 債務編號為:1,2,3

該查詢的C#等效項是:

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

債務代表客戶3筆債務

有趣的部分是sql返回帶有Id 2的債務,但是c#代碼返回ID1。Id1對我來說很有意義,但是為了保持代碼功能相同,我需要更改c#代碼以返回中間的代碼。

我不確定sql top 1后面有幾行與查詢匹配的邏輯是什么。

該查詢將選擇一個債務並更新數據庫。 我希望linq用sql返回相同的結果

謝謝

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

您可以啟動SQL事件探查器,執行存儲過程,查看結果,然后捕獲查詢通過linq發送的應用程序,然后再次查看結果。

另外,您可以輕松查看過程的執行計划,並嘗試對其進行優化,但是使用linq查詢,您將無法輕松地做到這一點。

AFAIK,在SQL中,如果選擇不帶ORDER BY的行,它將基於主鍵對結果集進行排序。 使用Order BY CLAUSE [field],隱式下一個訂單是[primarykey]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM