[英]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.