2011-09-06 38 views
8

Tôi đang cố gắng chạy đoạn mã sau đây, nhưng so sánh không thành công bằng cách không giao các thực thể tôi mong đợi.Cách đơn giản để so sánh Ngày tháng trong thuộc tính DateTime bằng Entity Framework 4 và LINQ truy vấn

So sánh 06/09/2011 0:00:00 đến 06/09/2011 12:25:00, sau này là giá trị bản ghi cơ sở dữ liệu của tôi. Vì vậy, đó là lý do tại sao so sánh là thất bại và tôi không nhận được các hồ sơ tôi cần.

Tôi chỉ đang cố gắng so sánh nếu ngày phù hợp, tôi không quan tâm đến thời gian.

DateTime today = DateTime.Now.Date; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || a.StartTime.Value == today) 
         .ToList(); 

Tôi chỉ có thể so sánh ngày tháng?

Nếu sử dụng tài sản .Date ở phần .StartTime.Value, tôi nhận được một ngoại lệ:

Các quy định loại thành viên 'ngày' không được hỗ trợ trong LINQ to Entities. Chỉ các trình khởi tạo, thành viên thực thể và thuộc tính điều hướng thực thể mới được hỗ trợ.

+0

Có lẽ câu hỏi này sẽ giúp ích? LINQ | Làm cách nào để thực hiện So sánh ngày trong Truy vấn LINQ? http://stackoverflow.com/questions/1088212/linq-how-do-i-perform-date-comparison-in-a-linq-query – Kyle

Trả lời

16

Bạn có thể sử dụng các thành viên cá nhân:

var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true 
            || (a.StartTime.Value.Year == todayYear 
             && a.StartTime.Value.Month == todayMonth 
             && a.StartTime.Value.Day == todayDay)) 
         .ToList(); 

... hoặc sử dụng bất kỳ the other methods/properties supported in L2E.

+0

Nó đang được sử dụng cho nhà điều hành bằng nhau. Nếu tôi cần phải kiểm tra lớn hơn và ít hơn nhà điều hành. –

-1

thử

DateTime todayStart = DateTime.Now.Date; 
DateTime todayEnd = DateTime.Now; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || (a.StartTime.Value >= todayStart && a.StartTime.Value <= todayEnd)) 
         .ToList(); 
11

Bạn cũng có thể sử dụng EntityFunctions.TruncateTime() dưới namespace System.Data.Objects

Ex.

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B") 

Hoạt động như sự quyến rũ.

+1

Làm thế nào để bạn viết UnitTests sau đó? –

+0

EntityFunctions hiện đã lỗi thời, hãy sử dụng DbFunctions! –

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