Thật không may LINQ không cung cấp một "tối đa bằng một thuộc tính" phương pháp. MoreLINQ thực hiện với toán tử MaxBy
của nó, nhưng điều đó không thể được dịch sang SQL tất nhiên. Vì vậy, nếu đây là một truy vấn LINQ to SQL (hoặc bất cứ điều gì), bạn sẽ cần một cách tiếp cận khác. Nếu nó đã LINQ to Objects, tuy nhiên:
return db.Exp.Where(rs => rs.ID == id)
.MaxBy(rs => rs.Amt)
.Received;
Lưu ý rằng đây là làm những gì các lời câu hỏi của bạn đặt câu hỏi:
- Trong số hồ sơ với ID cho ...
- Tìm một với số tiền cao nhất ...
- Và kiểm tra giá trị của
Received
Đây là không giống như:
- Trong số hồ sơ với ID cho nơi nhận là đúng ...
- Tìm một với số tiền cao nhất
Cũng lưu ý rằng điều này sẽ ném một ngoại lệ nếu có không có bản ghi có ID đó.
Nếu bạn muốn làm điều đó trong LINQ to SQL vv, có thể bạn muốn được tốt nhất off với một trật tự:
var highest = db.Exp.Where(rs => rs.ID == id)
.OrderByDescending(rs => rs.Amt)
.FirstOrDefault();
return highest != null && highest.Received;
Bạn không muốn làm điều này nếu bạn đang sử dụng LINQ đối tượng, vì nó sẽ sắp xếp tất cả các kết quả, khi bạn chỉ muốn tìm kết quả với số tiền cao nhất.
Nguồn
2012-02-22 21:42:17
Rất đẹp. Tôi nghi ngờ phần cuối cùng nên thực sự chỉ là 'x => x.Received', nhưng tôi thích cách xử lý các kết quả rỗng. –
@Joachim Isaksson - Tôi thích giải pháp. Tôi cần thêm một điều kiện khác vào .Any (x => x.Received == "Y" && x => x.Division == "Accounting") nhưng nó không cho phép tôi làm như vậy. Bất kỳ ý tưởng tại sao. Lưu ý rằng Division không nằm trong bảng trên. Tôi quên bao gồm nó –
@NatePet Bạn chỉ cần bao gồm 'x =>' một lần trong một lambda, vì vậy nó phải là '. Bất kỳ (x => x.Received ==" Y "&& x.Division ==" Kế toán ")' –