2010-09-25 10 views
7

Z ciekawości można zrobić coś takiego za pomocą NHibernate 3?Czy można utworzyć ogólny plik Session.QueryOver <T>?

public IQueryable<T> FindAll<T>() 
{ 
    return Session.QueryOver<T>().List().AsQueryable(); 
} 

otrzymuję błąd kompilacji mówiąc coś takiego ...

Type T musi być typem odniesienia w celu wykorzystania go jako parametr T.

Zastanawiałem się, czy mógłbym utwórz metodę rozszerzenia Session.QueryOver, aby obsłużyć typ ogólny.

mogę wymienić to, używając coś podobnego

return Session.CreateCriteria(typeof (T)).List<T>().AsQueryable(); 

Ale zależało korzystać z funkcji API zapytań. Jakieś pomysły? może brakuje czegoś oczywistego !!

Odpowiedz

10

Brakuje ograniczenie T:

public IQueryable<T> FindAll<T>() where T : class 
{ 
    return Session.QueryOver<T>().List().AsQueryable(); 
} 

where T : class określa, że ​​T musi być typu odniesienia. (Gdy zażądano błędu kompilacji, apperently QueryOver<T> jest ograniczone do typu referencyjnego). Jeśli parametr typu ma przypisane ograniczenia, to każda metoda standardowa korzystająca z tej metody z własnym parametrem generycznym musi stosować podobne ograniczenia.

Aby uzyskać pełny przegląd ogólnych ograniczeń parametrów, zobacz msdn.

+0

Wiedziałem, że przegapiłem coś oczywistego! –

Powiązane problemy