簡體   English   中英

如何選擇linq-to-sql MAX查詢?

[英]How to do one-select linq-to-sql MAX query?

這段代碼

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

生成以下SQL代碼:

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

但是,如果表為空,則會出現異常,指出不能將可為空的值分配給不可為空的變量。

然后,我編寫此代碼,明確告訴SQL提供程序我需要最大值或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 有什么辦法可以避免這種情況?

SQL可能很復雜,但是沒有性能差異。 SQL Server查詢優化器可靠地將兩個語句優化為同一計划。

確實,刪除冗余的嵌套選擇很簡單。 我從未見過這會導致計划差異。

因此,這是一個美學問題,而不是實際問題。 ORM生成復雜的代碼,我學會了使用它。

暫無
暫無

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

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