如何做一个选择linq-to-sql MAX查询?

时间:2012-11-02 13:21:48

标签: c# sql sql-server linq-to-sql max

此代码

int maxTrackId = dataContext.TicketTracks.Max(T => T.TrackId);

生成以下SQL代码:

SELECT MAX([t0].[TrackId]) AS [value]
FROM [dbo].[TicketTracks] AS [t0]

但是如果表是空的,我得到一个例外,即可以将可空值分配给不可为空的变量。

然后我编写这段代码,明确告诉SQL提供程序我需要maximum或null:

int? maxTrackId = dataContext.TicketTracks.Max(T => (int?)T.TrackId);

它在非可空SQL列上工作正常,可以返回null或数字。但生成的SQL代码有点奇怪:

SELECT MAX([t1].[value]) AS [value]
FROM (
    SELECT [t0].[TrackId] AS [value]
    FROM [dbo].[TicketTracks] AS [t0]
    ) AS [t1]

所以看起来很奇怪,特别是有两个SELECT。有没有办法绕过这个?

1 个答案:

答案 0 :(得分:1)

SQL可能会有问题,但没有性能差异。 SQL Server查询优化器可以可靠地优化同一计划的两个语句。

实际上,删除冗余嵌套选择是一件非常简单的事情。我从未见过这导致计划差异。

所以这是一个美学问题,而不是一个实际问题。 ORM生成了复杂的代码,我学会了使用它。

相关问题