2012-04-26 24 views
5

Tôi có đoạn code sauLINQ to Entities SqlFunctions.DateDiff không được hỗ trợ

DateTime now = DateTime.UtcNow; 

var allItemsOver64 = _inventoryContext.Items.Where(i => 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) >= 65); 

IQueryable<Item> items65To69 = allItemsOver64.Where(i => 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) >= 65 && 
    (SqlFunctions.DateDiff("dd", i.PrimaryInsured.DoB, now)/365.0) <= 69); 

Nhưng khi tôi cố gắng và sử dụng allItemsOver64 do đó Items65To69.Count() tôi nhận được lỗi này

Khái niệm ((((Chuyển đổi (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65) Và ((Chuyển đổi (DateDiff ("dd" , [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365)> = 65)) Và ((Chuyển đổi (DateDiff ("dd", [10007] .PrimaryInsured.DoB, 26/04/2012 15:03:09))/365) < = 69)) không được hỗ trợ.

Tôi đang làm gì sai?

+0

Cảm ơn bạn đã chỉnh sửa Arion. –

+0

Bạn đang sử dụng hệ thống RDBMS nào? –

Trả lời

6

Có thể bạn có thể thử sử dụng EntityFunctions thay vì SqlFunctions.

+0

Bây giờ tôi nhận được biểu thức (((DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65) Và (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49)> = 65)) Và (DiffYears ([10007] .PrimaryInsured.DoB, 26/04/2012 15:25:49) <= 69)) không được hỗ trợ. –

+0

Ngày nay DbFunctions; EntityFunctions đã lỗi thời –

+0

@ ThomasHagström - Tại sao bạn lại nói rằng nó đã lỗi thời? Nếu bạn kiểm tra tài liệu, bạn có thể thấy rằng nó vẫn được bao gồm trong khung và chắc chắn vẫn còn các hoạt động được hỗ trợ ở đó không được hỗ trợ ở nơi khác. –

2

chức năng datediff với LINQ to Entity đang theo dưới đây

Nếu bạn muốn

Day difference 
EntityFunctions.DiffDays(startDate , endDate); 

Hours diff -> 
EntityFunctions.DiffHours(startDate , endDate); 

Minuutes diff -> 
EntityFunctions.DiffMinutes(startDate , endDate); 
Các vấn đề liên quan