How do I get the max ID with Linq to Entity?

C#LinqEntity FrameworkLinq to-Entities

C# Problem Overview


I have a table User which has an identity column UserID, now what is the correct Linq to Entity line of code that would return me the max UserID?

I've tried:

using (MyDBEntities db = new MyDBEntities())
{
	var User = db.Users.Last();
	// or
	var User = db.Users.Max();

	return user.UserID;
}

but Last and Max don't seem to be supported.

Any ideas?

C# Solutions


Solution 1 - C#

Do that like this

db.Users.OrderByDescending(u => u.UserId).FirstOrDefault();

Solution 2 - C#

try this

int intIdt = db.Users.Max(u => u.UserId);

Update:

If no record then generate exception using above code try this

int? intIdt = db.Users.Max(u => (int?)u.UserId);

Solution 3 - C#

var max = db.Users.DefaultIfEmpty().Max(r => r == null ? 0 : r.ModelID);

when there are no records in db it would return 0 with no exception.

Solution 4 - C#

NisaPrieto

Users user = bd.Users.Where(u=> u.UserAge > 21).Max(u => u.UserID); 

will not work because MAX returns the same type of variable that the field is so in this case is an INT not an User object.

Solution 5 - C#

In case if you are using the async and await feature, it would be as follows:

User currentUser = await db.Users.OrderByDescending(u => u.UserId).FirstOrDefaultAsync();

Solution 6 - C#

Note that none of these answers will work if the key is a varchar since it is tempting to use MAX in a varchar column that is filled with "ints".

In a database if a column e.g. "Id" is in the database 1,2,3, 110, 112, 113, 4, 5, 6 Then all of the answers above will return 6.

So in your local database everything will work fine since while developing you will never get above 100 test records, then, at some moment during production you get a weird support ticket. Then after an hour you discover exactly this line "max" which seems to return the wrong key for some reason....

(and note that it says nowhere above that the key is INT...) (and if happens to end up in a generic library...)

So use:

Users.OrderByDescending(x=>x.Id.Length).ThenByDescending(a => a.Id).FirstOrDefault();

Solution 7 - C#

The best way to get the id of the entity you added is like this:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRayView Question on Stackoverflow
Solution 1 - C#Jonas KongslundView Answer on Stackoverflow
Solution 2 - C#Thiago ValenteView Answer on Stackoverflow
Solution 3 - C#Vihana KewalramaniView Answer on Stackoverflow
Solution 4 - C#Minyie DiazView Answer on Stackoverflow
Solution 5 - C#Psi-EdView Answer on Stackoverflow
Solution 6 - C#edelwaterView Answer on Stackoverflow
Solution 7 - C#Michel LozadaView Answer on Stackoverflow