प्राप्त करने के लिए सबक्वायरी के साथ जुड़ें, मैं अब यह करने के लिए कई घंटों की खोज कर रहा हूं, लेकिन मुझे मदद करने के लिए कुछ भी नहीं मिल रहा है।निबर्ननेट क्वेरीओवर कुल कॉलम
यह SQL क्वेरी मैं चलाने के लिए कोशिश कर रहा हूँ है:
SELECT b.*, a.Assignments FROM Branch b LEFT JOIN (
SELECT b.BranchID , COUNT(ab.BranchID) AS Assignments
FROM Branch b LEFT JOIN AssignmentBranch ab ON b.BranchID = ab.BranchID
GROUP BY b.BranchID
) a ON b.BranchID = a.BranchID
तो, मूल रूप से, मैं शाखाओं की एक सूची प्रदान करना चाहते हैं और
यहाँ डेटाबेस मॉडल है एक नया स्तंभ जो उस शाखा के लिए असाइनमेंट की संख्या का प्रतिनिधित्व करता है।
शाखा मॉडल
public class Branch : IEntity<int>
{
public virtual int ID
{
get;
set;
}
public virtual string Name { get; set; }
public virtual IList<AssignmentBranch> Assignments { get; set; }
}
AssignmentBranch मॉडल
public class AssignmentBranch : IEntity<int>
{
public virtual int ID
{
get;
set;
}
public virtual DateTime AssignedOn { get; set; }
public virtual Branch Branch { get; set; }
}
यहाँ मेरी NHibernate विन्यास है:
<class name="Branch" table="Branch">
<id name="ID" column="BranchID">
<generator class="identity"></generator>
</id>
<property name="Name"/>
<bag name="Assignments" cascade="none" inverse="true">
<key column="BranchID"/>
<one-to-many class="AssignmentBranch"/>
</bag>
<class name="AssignmentBranch" table="AssignmentBranch">
<id name="ID" column="AssignmentBranchID">
<generator class="identity"></generator>
</id>
<property name="AssignedOn" />
<property name="FromDate" />
<property name="ToDate" />
<many-to-one name="Assignment" column="AssignmentID" />
<many-to-one name="Branch" column="BranchID" />
मैंने कई तरीकों से यह कोशिश की है, लेकिन मुझे क्वेरीओवर का उपयोग करके उप-क्वेरी में शामिल होने का कोई तरीका नहीं दिख रहा है।
// aliases
Branch branch = null; AssignmentBranch assignment = null;
var subquery = QueryOver.Of<Branch>(() => branch)
.Where(() => branch.Project.ID == projectID)
.JoinQueryOver<AssignmentBranch>(() => branch.Assignments,()=> assignment,
NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.SelectList(list => list
.SelectGroup(x=>x.ID)
.SelectCount(()=>assignment.ID)
);
var query = session.QueryOver<Branch>(()=>branch)
.JoinAlias(???) // how can I join with a sub-query?
.TransformUsing(Transformers.AliasToBean<BranchAssignments>())
.List<BranchAssignments>();
किसी को भी मेरी मदद कर सकते हैं:
मैं इस तरह की कोशिश की? यह जुड़ने के उप वास्तव में, शायद वहाँ है कि मुझे याद आ रही एक और बेहतर समाधान है ...
धन्यवाद, कॉस्मिन
अच्छा होगा। मैंने सोचा कि आपको पूरी शाखा वस्तु की आवश्यकता है और न केवल कुछ गुण। – Firo
मुझे कुछ शाखा गुणों और असाइनमेंट की गिनती के साथ एक कस्टम इकाई को पॉप्युलेट करने की आवश्यकता है। फिर भी, जवाब देने का समय लेने के लिए धन्यवाद, मुझे लगता है कि आपका जवाब भी दिलचस्प है। – noir
यह बाएं जुड़ने के बजाय एक नेस्टेड सबक्वायरी बनाता है। मैं उम्मीद करता हूं कि यह शामिल होने से बहुत खराब प्रदर्शन करेगा (हालांकि SQL क्वेरी ऑप्टिमाइज़र लगातार मुझे आश्चर्यचकित करता है :-) –