How to get max value of a column using Entity Framework?

后端 未结 10 2164
旧时难觅i
旧时难觅i 2020-12-13 05:16

To get maximum value of a column that contains integer, I can use the following T-SQL comand

SELECT MAX(expression )
FROM tables
WHERE predicates;

10条回答
  •  孤街浪徒
    2020-12-13 05:50

    Your column is nullable

    int maxAge = context.Persons.Select(p => p.Age).Max() ?? 0;
    

    Your column is non-nullable

    int maxAge = context.Persons.Select(p => p.Age).Cast().Max() ?? 0;
    

    In both cases, you can use the second code. If you use DefaultIfEmpty, you will do a bigger query on your server. For people who are interested, here are the EF6 equivalent:

    Query without DefaultIfEmpty

    SELECT 
        [GroupBy1].[A1] AS [C1]
        FROM ( SELECT 
            MAX([Extent1].[Age]) AS [A1]
            FROM [dbo].[Persons] AS [Extent1]
        )  AS [GroupBy1]
    

    Query with 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]
    

提交回复
热议问题