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 对我来说很有意义但是为了保持代码功能相同,我需要更改 c# 代码以返回中间代码。

我不确定 sql top 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 Profiler,执行存储过程,查看结果,然后通过 linq 捕获应用程序发送的查询,并再次查看结果。

此外,您可以轻松查看程序的执行计划,并尝试对其进行优化,但使用 linq 查询,您无法轻松做到这一点。

于 2013-03-26T14:45:43.923 回答
-2

AFAIK,在 SQL 中,如果您选择没有 ORDER BY 的行,它会根据主键对结果集进行排序。使用 Order BY CLAUSE [field],下一个订单是 [primarykey]。

于 2013-03-26T14:31:32.827 回答