2013-07-11 47 views
9

Vấn đề: Tôi có một hình thức tìm kiếm cho phép người dùng tìm kiếm cái gì đó mà ngày chốt danh sách rơi giữa 2 ngày (mm/dd/yyyy)Hãy so sánh Chỉ cần ngày Phần 2 biến DateTime trong LINQ với EF

Tất cả của các bản ghi và các đối tượng có kiểu Datetime nhưng tất cả những gì tôi cần so sánh là các phần ngày không phải là phần thời gian.

Theo MSDN, Ngày bất động sản được hỗ trợ trong LINQ Tuy nhiên tuyên bố này như được viết sẽ không cho phép tôi thêm .Date đến phần lambda:

Lỗi:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

Ví dụ :

x.DateCreated.Date 

Tôi chắc chắn vấn đề này xuất hiện rất nhiều - Ho Tôi có giải quyết nó không?

Tôi đoán tôi có thể pad ngày khác bằng cách thêm 23:59:59 = 86.399 giây đến < = phần

Dưới đây là báo cáo kết quả. (Db là một đối tượng bối cảnh)

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= df.Date && x.DateCreated <= dt.Date) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
+1

Bạn nhận được thông báo lỗi nào khi thử 'x.DateCreated.Date'? – Treb

+0

Và loại 'DateCreated' là gì? –

+0

DateCreated chỉ là một loại DateTime – Slinky

Trả lời

14

Bạn nên sử dụng chức năng TruncateTime:

EntityFunctions.TruncateTime(x.DateCreated) 
+6

được thay thế bằng 'DbFunctions.TruncateTime' – gor

1

tôi sử dụng các giải pháp sau đây

DateTime startDate = new DateTime(df.Year, df.Month, df.Day, 0,0,0); 
DateTime endDate = new DateTime(df.Year, df.Month, df.Day, 23,59,59); 

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= startDate && x.DateCreated <= endDate) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
4

Bạn nên sử dụng DbFunctions.TruncateTime() trong phiên bản Entity Framework 6.

var fromDate = criteria.FromCreatedDate.Value.Date; 
items.Where(i => DbFunctions.TruncateTime(i.CreatedOnDate) >=fromDate); 

Để nhận tất cả các mục có ngày lớn hơn từ ngày bỏ qua timepart.

Xin cảm ơn @gor.

Các vấn đề liên quan