2011-11-03 7 views
7

Czy ktoś sugeruje, w jaki sposób włączyć tę funkcję LINQ do SQL?Metoda X nie obsługuje translacji do SQL - booleans i datetime

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

Wyłączone to bool, EnabledFrom i EnabledTo to DateTime? i wszystkie pola bazy danych.

+1

nie wydaje się być dowolny LINQ w kodzie pokazałeś. Wątpię, że to kod powodujący twój błąd. – BlueMonkMN

+2

Przykład zapytania (jego część) za pomocą IsEnabled; query = query.Where (a => a.PageMeta.Hidden ==! Visible && a.PageMeta.IsEnabled() == widoczny); – Eilev

+1

Problem polega prawdopodobnie na tym, że próbuje znaleźć IsEnabled w SQL. Przenieś logikę z IsEnabled bezpośrednio do zapytania linq. – Beku

Odpowiedz

6

Sprawdź, czy twoja metoda IsEnabled zwraca wyrażenie.

Zobacz tutaj: http://www.atrevido.net/blog/2007/09/05/Calling+Custom+Methods+In+LINQtoSQL.aspx

Coś jak poniżej (niesprawdzone):

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

Wygląda świetnie! Ale czy wiesz, jak mogę uzyskać dostęp do IsEnabled przez EntityRef: .Where (a => a.Account.IsEnabled) <- to nie działa – Eilev

+0

'.Where (IsEnabled)' –

+0

. Gdzie będzie wykonać na obiekcie w kwerendzie , ale "Konto" to EntityRef na obiektach. To zadziała: query.Select (a => a.count) .Where (IsEnabled) - ale wtedy otrzymam tylko konta w zamian, potrzebuję oryginalnych obiektów – Eilev

Powiązane problemy