คอลัมน์ของคุณเป็นโมฆะ
int maxAge = context.Persons.Select(p => p.Age).Max() ?? 0;
คอลัมน์ของคุณไม่เป็นโมฆะ
int maxAge = context.Persons.Select(p => p.Age).Cast<int?>().Max() ?? 0;
ในทั้งสองกรณีคุณสามารถใช้รหัสที่สองได้ หากคุณใช้DefaultIfEmpty
คุณจะทำการค้นหาที่ใหญ่ขึ้นบนเซิร์ฟเวอร์ของคุณ สำหรับผู้ที่สนใจนี่คือ EF6 เทียบเท่า:
แบบสอบถามโดยไม่ต้อง DefaultIfEmpty
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
MAX([Extent1].[Age]) AS [A1]
FROM [dbo].[Persons] AS [Extent1]
) AS [GroupBy1]
สอบถามด้วย DefaultIfEmpty
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
MAX([Join1].[A1]) AS [A1]
FROM ( SELECT
CASE WHEN ([Project1].[C1] IS NULL) THEN 0 ELSE [Project1].[Age] END AS [A1]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
LEFT OUTER JOIN (SELECT
[Extent1].[Age] AS [Age],
cast(1 as tinyint) AS [C1]
FROM [dbo].[Persons] AS [Extent1]) AS [Project1] ON 1 = 1
) AS [Join1]
) AS [GroupBy1]