2012-03-10 14 views
5

का उपयोग करके संयोजन के साथ संग्रह पर प्रतिबंध सभी हायबर्ननेट गुरु!NHibernate QueryOver

को देखते हुए इन दो वर्गों:

public class User { 
    long Id; 
    string Name; 
} 

public class Project { 
    long Id; 
    User Owner; 
    IList<User> Managers; 
    ... 
} 

मैं एक प्रश्न QueryOver का उपयोग कर (मापदंड "जादू स्ट्रिंग" अन्य नामों का उपयोग नहीं), मालिक या के रूप में के रूप में user1 होने सभी परियोजनाओं को पाने के लिए करना चाहते हैं प्रबंधकों में से एक।

मुझे पता है कि अलग से कैसे:

  • प्राप्त मालिक के रूप में user1 होने परियोजनाओं:। Session.QueryOver <> परियोजना >>() जहां (पी => p.Owner == user1)
  • प्राप्त । एक प्रबंधक के रूप: session.QueryOver <>() JoinAlias ​​(पी => p.Managers,() => प्रबंधक) .Where (() => प्रबंधक == user1)

लेकिन मैं डॉन ' टी के संयोजन को कैसे लिखना है।

अगर किसी के पास कोई विचार था, तो इससे मुझे बहुत मदद मिलेगी।

अग्रिम धन्यवाद,

क्रिस

उत्तर

2

कुछ की तरह: -

User manager = null; 

var query = session 
    .QueryOver<Project>() 
    .JoinAlias(j => j.Managers,() => manager) 
    .Where(w => manager.Name == user1 || w.Owner == user1) 
    .List<Project>(); 

संपादितId को Name से फिल्टर को बदलने के लिए (के रूप में ओ पी ने बताया): -

.Where(w=>manager.Id == user1.Id || w.Owner.Id == user1.Id) 

EDIT2 बाईं उपयोग करने के लिए

.JoinAlias(j => j.Managers,() => manager).left 
+0

धन्यवाद, वास्तव में हम (वस्तुओं 'आईडी पर और वस्तुओं पर नहीं .Where समानता डब्ल्यू => manager.Id करना चाहिए आंतरिक बदलने के लिए == user1.Id || w.Owner.Id == user1.Id) हाउवर, यह अपेक्षित परिणाम नहीं देता है क्योंकि यह परियोजना और उपयोगकर्ता के बीच एक आंतरिक जुड़ाव करता है, और इसलिए, उपयोगकर्ता को मालिक के रूप में उपयोगकर्ता 1 नहीं मिल रहा है लेकिन अभी तक कोई प्रबंधक नहीं है :( – Chris

+0

क्षमा करें मैं 100% सुनिश्चित नहीं था कि आप किस पर फ़िल्टर करना चाहते थे और आपने उल्लेख नहीं किया था कि आप बाएं शामिल होना चाहते हैं ... – Rippo

+0

क्षमा न करें, आपको पता नहीं था :) । Left.JoinAlias ​​(...) चाल थी। बहुत बहुत धन्यवाद Rippo! – Chris

संबंधित मुद्दे