Linq to Entity에서 최대 ID를 얻으려면 어떻게해야합니까?


84

ID 열이있는 테이블 User가 있습니다. UserID이제 최대 값을 반환하는 코드 줄에 대한 올바른 Linq는 무엇 UserID입니까?

난 노력 했어:

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

    return user.UserID;
}

그러나 LastMax지원하지 않는 것.

어떤 아이디어?

답변:


153

이렇게하세요

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

4
누군가 Max (u => u.userId) 솔루션과 비교하여이 솔루션의 성능을 알고 있습니까?
Felix Keil

확실하지 않지만 IMHO Max는 Order보다 성능이 뛰어납니다. Max는 O (n)이고 Sort는 O (n)보다 훨씬 큰 정렬 알고리즘을 의미하기 때문입니다.
Luis

106

이 시도

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

최신 정보:

레코드가 없으면 위의 코드를 사용하여 예외를 생성하십시오.

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

감사합니다. 도움이 되었나요? intIdt = db.Users.Max (u => (int?) u.UserId);
GS Shekhawat

3
나뿐입니까 아니면이 스타일이 Jonas Kongslund의 대답보다 더 읽기 쉽습니까?
BornToCode 2014

2
@BornToCode 실제로하려는 작업에 따라 다릅니다. 이 솔루션은 질문에 대답하는 반면 (최대 ID를 얻음) Jonas Kongslund의 대답은 최대 ID를 가진 객체를 반환합니다.
actaram

가장 유창한 대답!
Patricia

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

db에 레코드가 없으면 예외없이 0을 반환합니다.


3
r => r? .ModelId ?? 0-새 C #의 바로 가기
Krzysztof Skowronek 2011

11

NisaPrieto

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

MAX는 필드와 동일한 유형의 변수를 반환하므로이 경우에는 사용자 개체가 아닌 INT이므로 작동하지 않습니다.


3

asyncawait기능을 사용하는 경우 다음과 같습니다.

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

-1

추가 한 엔티티의 ID를 얻는 가장 좋은 방법은 다음과 같습니다.

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.