Làm cách nào để nhận ID tối đa với Linq to Entity?


83

Tôi có một Người dùng bảng có cột nhận dạng UserID, bây giờ dòng mã Linq to Entity chính xác sẽ trả về giá trị tối đa cho tôi là UserIDgì?

Tôi đã thử:

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

    return user.UserID;
}

nhưng LastMaxdường như không được hỗ trợ.

Có ý kiến ​​gì không?

Câu trả lời:


153

Làm như thế này

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

4
Có ai biết hiệu suất của giải pháp này so với giải pháp Max (u => u.userId) không?
Felix Keil,

Tôi không chắc về nó nhưng IMHO Max hoạt động hiệu quả hơn Order, vì Max là O (n) và Sort ngụ ý một số thuật toán sắp xếp, lớn hơn O (n).
Luis

104

thử đi

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

Cập nhật:

Nếu không có bản ghi thì tạo ngoại lệ bằng cách sử dụng mã trên, hãy thử điều này

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

Cảm ơn nó hữu ích cho tôi int? intIdt = db.Users.Max (u => (int?) u.UserId);
GS Shekhawat

3
Có phải chỉ tôi hay văn phong này dễ đọc hơn câu trả lời của Jonas Kongslund?
BornToCode

2
@BornToCode Nó phụ thuộc vào những gì bạn đang thực sự cố gắng làm. Giải pháp này trả lời câu hỏi (nó nhận được id tối đa), trong khi câu trả lời của Jonas Kongslund trả về đối tượng có id tối đa.
actaram

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

khi không có bản ghi nào trong db nó sẽ trả về 0 mà không có ngoại lệ.


3
r => r? .ModelId ?? 0 - phím tắt trong C # mới
Krzysztof Skowronek

11

NisaPrieto

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

sẽ không hoạt động vì MAX trả về cùng loại biến với trường, vì vậy trong trường hợp này là INT không phải đối tượng Người dùng.


3

Trong trường hợp nếu bạn đang sử dụng tính năng asyncawait, nó sẽ như sau:

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

0

Cách tốt nhất để lấy id của thực thể bạn đã thêm là như sau:

public int InsertEntity(Entity factor)
{
    Db.Entities.Add(factor);
    Db.SaveChanges();
    var id = factor.id;
    return id;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.