我正在用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的debt,而c#代码返回Id为1。Id为1对我来说是有意义的,但为了保持代码功能相同,我需要更改c#代码以返回中间值。
我不确定sql top 1背后的逻辑是什么,其中有几行与查询匹配。
查询将选择一个债务并更新数据库。
谢谢
4条答案
按热度按时间a9wyjsp71#
您可以启动SQL Profiler,执行存储过程,查看结果,然后捕获应用程序通过linq发送的查询,并再次查看结果。
此外,您可以轻松地查看过程的执行计划,并尝试对其进行优化,但使用linq查询,您无法轻松做到这一点。
70gysomp2#
请在firstordefault之前尝试Take(1)。
r8xiu3jd3#
AFAIK,在SQL中,如果你选择没有ORDER BY的行,它会根据主键对结果集进行排序。使用Order BY CLAUSE [field],隐式地下一个顺序是[primarykey]。
vxf3dgd44#