2011-02-01 42 views
5

Khi tôi sử dụng các truy vấnASP.NET MVC LINQ truy vấn

var NewMatchs = (from x in entity.matches select x).LastOrDefault(); 

tôi nhận được lỗi như

LINQ to Entities này không nhận ra phương pháp 'SocialSports.Models.match LastOrDefaultmatch' và phương thức này không thể là được dịch sang biểu thức cửa hàng.

Có gì sai trong mã của tôi ???

Cảm ơn ...

Trả lời

7

Bạn không thể sử dụng LastOrDefault để truy vấn các thực thể EF, vì nó không thể dịch sang T-SQL.

Không phải tất cả các phương thức LINQ đều được hỗ trợ bởi LINQ to Entities.

Danh sách ALL/phương pháp không được hỗ trợ hỗ trợ:

http://msdn.microsoft.com/en-us/library/bb738550.aspx

Bạn có thể thử

var NewMatchs = (from x in entity.matches select x).ToList().LastOrDefault(); 

nhưng điều này sẽ được tải TẤT CẢ các trận đấu từ db và thực hiện LINQ to đối tượng .

Hoặc thử sắp xếp và gọi FirstOrDefault.

+0

.ToList(). LastOrDefault() awesome! – timothyclifford

+1

cách này không tốt. Bởi vì có thể có rất nhiều mục trong db. –

+0

@ ДарияПечайко - đó là chính xác những gì tôi đã viết trong câu trả lời của tôi. –

8

LastOrDefault không được hỗ trợ trong LINQ to Entities. Bạn có thể đạt được điều tương tự bằng cách sử dụng các mục sau:

var lastmatch = (from x in entity.matches select x) 
         // Assuming you have some kind of timestamp 
        .OrderByDescending(s => s.Date) 
        .FirstOrDefault();