2010-05-03 18 views
5
Ben Sol dış birleşim oluşturmak için arıyorum

Buna benzer tablolar üzerinde birden çok ile Nhibernate sorgu katılmak Üyelik Bunun nasıl yapılacağını anlatan bir şansım vardı. Baska öneri?NHibernate Sol Dış

cevap

12

Aslında bunu çözdüm. Sen boş

.CreateCriteria("Interactions", "i", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
      .Add(Expression.Or(Expression.Eq("i.ActingUser", user), Expression.IsNull("i.ActingUser"))) 

bu targetpost id katılmak bir sol oluşturur ve sonra tüm olmayan boş/olmayan kullanıcı etkileşimlerini ortadan kaldırır için çek yapmak gerekir.

0

Uzun zamandır ihtiyacım olanı yapmayan her tür gönderiyi kontrol ederken harcadım ve yazdıklarınız aradığına en yakın olanı.

Testlerimden (nHibernate 3 ile) sorgunuz doğru değil. Aslında Ölçütlerinizin SQL daha şuna benzer: Etkileşim en ActingUser 202 olduğunu veya hiç etkileşim yazı için varolduğunu sadece mesaj/etkileşimlerini döndürür

SELECT * 
FROM [Posts] p 
LEFT JOIN [PostInteractions] i 
    ON p.PostId = i.PostID_TargetPost 
WHERE (i.UserID_ActingUser = 202 OR i.UserID_ActingUser IS NULL) 

. Sonunda bunu anladım çok daha fazla testlerden sonra

...

bu (vb.net) deneyin: Bir "withClause" seçeneğini kullanarak CreateCriteria işlevine bir aşırı yük var

session.CreateCriteria(Of Posts)("p") _ 
.CreateCriteria("Interactions", "i", _ 
       NHibernate.SqlCommand.JoinType.LeftOuterJoin, _ 
       Expression.Eq("i.ActingUser", user)) 

. Bu benim için kısaca çalıştı ve ben de senin aradığın şeyin olduğuna inanıyorum.

Ben konu bayağı eski biliyorum ama nHibernate sorguları büyük örnekler için başkasının .... Ayrıca

, yardımcı olabilir (bu benim için büyük bir yardımcı oldu): http://ayende.com/blog/4023/nhibernate-queries-examples

Eğlencenin !

İlgili konular