LINQ Max on nullable datatypes

1700 views c# asp.net .net linq
-2

I have an entity as follows.

SchoolDetails

ID Name Rank  School
1  A           Lawrence
2  B      1    Lawrence
3  C      2    Lawrence

I need to fetch the details of student in a particular school(Lawrence) who has highest rank. In this example ID 2 is the desired output.

My linq query is:

var result = SchoolDetails.Where(x=>x.School == "Lawrence").Max(y=>y.Rank).SingleOrDefault();

I get a compliation message saying that "int? doesnt contain a definition for SingleOrDefault"

I cannot change the datatype of Rank column to make it non nullable since it is a production code. So, given this situation how can I fetch a record with highest rank?

answered question

you don't need SingleOrDefault after using Max max returns the max int? and not a List

filter the null value before the .Max

@MohammadAli : I need to fetch the entire object .

@user1907849 you can do order by Rank descending and get first element

@user1907849 then you need to get first the Max value of Rank and use it as comparison in your filter. You can write the filter directly into the SingleOrDefault method

1 Answer

3

Just filter the nulls before use Max

 var result = SchoolDetails.Where(x=>x.School == "Lawrence" && x.Rank != null).Max(y=>y.Rank);

Also as pointed out in the comments you don't need the FirstOrDefault as the query already return the complete object

posted this

Have an answer?

JD

Please login first before posting an answer.