2010-09-25 20 views
7

Nezaket dışında NHibernate 3 kullanarak böyle bir şey yapmak mümkün mü?Genel bir Session.QueryOver <T> oluşturmak mümkün mü?

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

Ben

Tip T parametre T. olarak Elimden gelse merak

onu kullanmak için bir başvuru türü olmalıdır ... gibi bir şey söyleyerek bir derleme hatası alıyorum Genel bir tür işlemek için Session.QueryOver bir uzantısı yöntemi oluşturun.

Ben

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

gibi bu kullanarak değiştirebilsennasıl Ama sorgu API özelliklerini kullanmak istiyordu başladı. Herhangi bir fikir? belki açık bir şey eksik!

cevap

10

Sen T üzerinde bir kısıtlama eksik:

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

where T : classT bir başvuru türü olması gerektiğini tanımlar. (İstenen derleme hatası olarak, görünüşte QueryOver<T> referans türüyle sınırlıdır). Bir type parametresi ona uygulanan kısıtlamalara sahipse, bu yöntemi kendi genel parametresiyle kullanan herhangi bir genel yöntem benzer kısıtlamalar uygulamak zorundadır.

Genel tip parametre kısıtlamalarına genel bakış için bkz. msdn.

+0

Açık bir şeyi özlediğimi biliyordum! –

İlgili konular