2011-01-28 3 views
8

chạy mã này:DateTime thao tác bên trong LINQ to Entities truy vấn

public bool CheckTime(DateTime date, int UserID, int TotalTimeMin) 
     { 
      using (var context = new myDB()) 
      {   
       var assginments = from c in context.Assignments.Where(x=>(x.AssignmentDateTime < date && x.AssignmentDateTime.Value.AddMinutes(TotalTimeMin) > date) || 
        (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin))) select c; 

       if(assginments != null) return false; 
       else return true; 
      } 


     } 

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

LINQ to Entities does not recognize the method 'System.DateTime AddMinutes(Double)' method, and this method cannot be translated into a store expression. 

TotalTimeMin is int. Tôi không chắc chắn nguyên nhân gây ra điều này: AssignmentDateTime là DateTime? và có lẽ đây là vấn đề?

+0

Vấn đề là LINQ-to-Entities không biết cách dịch DateTime.AddMinutes sang ngôn ngữ kho dữ liệu của bạn (có thể là SQL). Có lẽ điều đó sẽ chỉ cho bạn đi đúng hướng. Tôi cần thêm thời gian để thực sự tìm ra giải pháp cho bạn. –

+0

Cảm ơn, tôi đã thực sự chơi với nó một chút và bạn có thể đúng, không có vấn đề gì tôi làm, không thể sử dụng AddMinnute bên trong truy vấn (mặc dù tôi có thể dễ dàng viết nó với SQL ....) – Dani

Trả lời

16

Sử dụng EntityFunctions.AddMinutes (yêu cầu EF 4):

public bool CheckTime(DateTime date, int UserID, int TotalTimeMin) 
    { 
     using (var context = new myDB()) 
     {   
      var assginments = context.Assignments 
            .Where(x=>(x.AssignmentDateTime < date 
               && EntityFunctions.AddMinutes(x.AssignmentDateTime,TotalTimeMin) > date) 
               || (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin))); 

      if(assginments != null) return false; 
      else return true; 
     } 
    } 

Lưu ý rằng assignments sẽ không bao giờ được null (nhưng nó có thể là rỗng - kiểm tra assignments.Any()).

+0

Cảm ơn. (Tôi đã bỏ qua ToList và kiểm tra đếm ... nhưng EntityFunctions là mới đối với tôi và những gì tôi đang tìm kiếm. – Dani

+3

Rõ ràng Entityfunctions đã lỗi thời. Người ta có thể sử dụng DbFunctions.AddMinutes() ngay bây giờ (EF 6.x) . – UnreliableWitness