我在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为Id 2,但c#代码返回Id 1。 Id 1对我有意义但是为了保持代码功能相同,我需要更改c#代码以返回中间代码。
我不确定sql top 1背后的逻辑是什么,其中几行与查询匹配。
查询将选择一个债务并更新数据库。我想linq用sql返回相同的结果
由于
答案 0 :(得分:0)
debts.OrderByDescending(d => d.Balance).ThenByDescending(d => d.Id)
.FirstOrDefault()
答案 1 :(得分:0)
您可以启动SQL事件探查器,执行存储过程,查看结果,然后捕获查询通过linq发送的应用程序,并再次查看结果。
此外,您可以轻松查看过程的执行计划,并尝试进行优化,但使用linq查询,您无法轻松完成此操作。
答案 2 :(得分:-3)
AFAIK,在SQL中如果选择没有ORDER BY的行,它会根据主键对结果集进行排序。 使用Order BY CLAUSE [field],隐式下一个订单是[primarykey]。