2011-11-03 26 views
7

Có ai gợi ý về cách làm cho hàm này được LINQ to SQL hỗ trợ không?Phương pháp X không có bản dịch được hỗ trợ cho SQL - booleans và datetime

public bool IsEnabled() 
{ 
    return !this.Disabled && 
      ((!this.EnabledFrom.HasValue || this.EnabledFrom < DateTime.Now) && 
      (!this.EnabledTo.HasValue || this.EnabledTo > DateTime.Now)); 
} 

Đã tắt là bool, EnabledFrom và EnabledTo là DateTime? và tất cả các trường cơ sở dữ liệu.

+1

Dường như không có bất kỳ LINQ trong mã bạn thấy. Tôi nghi ngờ đây là mã gây ra lỗi của bạn. – BlueMonkMN

+2

Ví dụ về truy vấn (một phần của nó) sử dụng IsEnabled; truy vấn = truy vấn.Where (a => a.PageMeta.Hidden ==! Visible && a.PageMeta.IsEnabled() == hiển thị); – Eilev

+1

Vấn đề có thể là nó cố gắng tìm IsEnabled trong SQL. Di chuyển logic từ IsEnabled trực tiếp đến truy vấn LINQ. – Beku

Trả lời

6

Phương thức IsEnabled trả về một biểu thức.

Xem ở đây: http://www.atrevido.net/blog/2007/09/05/Calling+Custom+Methods+In+LINQtoSQL.aspx

Something như dưới đây (chưa được kiểm tra):

static Expression<Func<Account, bool>> IsEnabled = a => 
    !a.Disabled && 
    ((!a.EnabledFrom.HasValue || a.EnabledFrom < DateTime.Now) && 
    (!a.EnabledTo.HasValue || a.EnabledTo > DateTime.Now)); 
+0

Có vẻ tuyệt vời! Nhưng bạn có biết làm thế nào tôi có thể truy cập IsEnabled thông qua một EntityRef: .Where (a => a.Account.IsEnabled) <- điều này không hoạt động – Eilev

+0

'.Where (IsEnabled)' –

+0

. Sẽ thực thi trên đối tượng trong truy vấn , nhưng "Tài khoản" là một EntityRef trên các đối tượng. Điều này sẽ làm việc: query.Select (a => a.Account) .Where (IsEnabled) - nhưng sau đó tôi chỉ nhận lại tài khoản, tôi cần các đối tượng gốc – Eilev

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