2011-05-11 21 views
10

Ben internet arama edilmiş ve istediğim queryover ex nerede Maddesine dize işlevlerini kullanmaya Örneğin nhibernate 3.0 ait queryover nasıl kullanılacağına ilişkin bir örnek bulamıyorum:NHibernate QueryOver'da SQL işlevlerini kullanabilir miyim?

var item = Query.Where(x => x.Name.ToLower() == name.ToLower()).FirstOrDefault(); 

Fakat bu işe yaramıyor çünkü nhibernate ToLower'ı anlayamıyor, bu yüzden diyalektin bu mümkün olabileceği şekilde nasıl uzayabilir?

cevap

9
session.QueryOver<Foo>() 
    .Where(Restrictions.Eq(
     Projections.SqlFunction("lower", NHibernateUtil.String, 
      Projections.Property<Foo>(x => x.Name)), 
     name.ToLower())) 

Eğer where lower(Name) = @p0

+0

Merhaba, gerçekten çalıştığım cevap için teşekkürler, bu çözüm için ne kadar uzun süre aradığımı bilmiyorsunuz. Teşekkürler –

+0

@Ruben Monteiro sorun değil, bazen QueryOver ile çalışırken bazı Kriterlerde karıştırmanız gerektiğini anladım. – dotjoe

0

Ben kullanıyorum yapı en az çalıştığını düşünüyoruz (sürüm 3.0.0.4000) ... Aşağıda benim örnektir ...

var reasons = _session.Query<Reason>(); 
var myReason = (from r in reasons 
       where r.IsCritical 
        && r.ReasonCode.ToUpper() == reasonCode.ToUpper() 
       select r).FirstOrDefault(); 

Give it a shot ve eğer çalışırsa bana bildirin sizin için ...

+0

bu nereye performansı için kötü olabilecek ÜST() SQLSunucusu işlevini ... (kullanan fıkra Bilginize ... bir sonuçlanır gibi SQL almalısınız) – Todd

+0

Bu var sorgu çalıştım = Session.GetISession(). QueryOver (); var öğe = (f dosyasından f.Description.ToLower() == description.ToLower() select f) .List(). FirstOrDefault (); ve bu hatayı aldım E-postada tanınmayan yöntem çağrısı f.Description.ToUpper(), benim nHibernate sürümümse eğer 3.1.0.4000, @Todd - Performans konusunu biliyorum ama bu yolu uygulamanız gerekiyor –

+0

İlginç ... sağ QueryOver sözdizimini kullandığınızda işe yaramıyor ... tahminim sabit olacak bir gün ... İhtiyaçlarınıza bağlı olarak bunun için Sorgu sözdizimini kullanmaya çalışabilir ve işe yarayabilir ... aşağıdaki gibi güncelleştirildi ... – Todd