मैं निम्नलिखित एसक्यूएल CreateCriteria का उपयोग कर कैसे लिख सकते हैं:NHibernate: CreateCriteria और मौजूद खंड
SELECT * FROM FooBar fb
WHERE EXISTS (SELECT FooBarId FROM Baz b WHERE b.FooBarId = fb.Id)
मैं निम्नलिखित एसक्यूएल CreateCriteria का उपयोग कर कैसे लिख सकते हैं:NHibernate: CreateCriteria और मौजूद खंड
SELECT * FROM FooBar fb
WHERE EXISTS (SELECT FooBarId FROM Baz b WHERE b.FooBarId = fb.Id)
मैं बाहर काम कैसे IsNotEmpty एक्सप्रेशन का उपयोग करके यह करने के लिए। यहाँ यह उपयोग कर रहा है NHibernate लैम्ब्डा एक्सटेंशन:
Session.CreateCriteria<FooBar>()
.Add(SqlExpression.IsNotEmpty<FooBar>(x => x.Bazes))
.List<FooBar>();
यहाँ कैसे आप यह कर सकते है:
var fooBars = Session.CreateCriteria<FooBar>()
.Add(Restrictions.IsNotEmpty("Bazs")).List<FooBar>();
... यह सोचते हैं एक संग्रह संपत्ति है (एक से कई) FooBar ऑब्जेक्ट में "Bazs"।
वैकल्पिक रूप से आप उस तरह अलग मापदंड इस्तेमाल कर सकते हैं:
DetachedCriteria dCriteria = DetachedCriteria.For<Baz>("baz")
.SetProjection(Projections.Property("baz.FooBarId"))
.Add(Restrictions.EqProperty("baz.FooBarId", "fooBar.Id"));
var fooBars = Session.CreateCriteria<FooBar>("fooBar")
.Add(Subqueries.Exists(dCriteria)).List<FooBar>();
करने के बाद सिर्फ एक संबंधित समस्या हल हो और अंत में एक समाधान मैंने सोचा कि मैं इस सवाल का जवाब यहाँ साझा करते हैं पर पहुंचे: मान लिया जाये कि आप मूल सवाल क्वेरी चाहते
, साथ उप-प्रश्न पर एक अतिरिक्त शर्त:
SELECT * FROM FooBar fb
WHERE EXISTS (SELECT FooBarId FROM Baz b WHERE b.FooBarId = fb.Id
AND Quantity = 5)
मान लिया जाये कि आप माता-पिता के लिए बाज वर्ग पर एक संदर्भ है, कहा जाता है, का कहना है कि FooBarRef [Fluent मानचित्र कक्षा में आप संदर्भ() विधि का उपयोग करें], आप निम्नानुसार क्वेरी बनायेगा:
DetachedCriteria dCriteria = DetachedCriteria.For<Baz>("baz")
.SetProjection(Projections.Property("baz.FooBarId"))
.Add(Expression.EqProperty("this.FooBarId", "FooBarRef.Id"))
.Add(Expression.Eq("baz.Quantity", 5));
var fooBars = Session.CreateCriteria<FooBar>("fooBar")
.Add(Subqueries.Exists(dCriteria)).List<FooBar>();
मैं 100% उर्फ "यह" है, जो उर्फ NHibernate स्वचालित रूप से क्वेरी में जड़ इकाई (टेबल) को आवंटित है की कड़ी कोडिंग के बारे में आश्वस्त नहीं हूँ, लेकिन यह एक ही रास्ता मैं नहीं हुआ है उप-क्वेरी के भीतर से मूल क्वेरी की तालिका की कुंजी को संदर्भित करने के लिए मिला।
दरअसल ... और आपने मुझे यह विचार दिया कि इसे सरल तरीके से और निबर्ननेट लैम्ब्डा एक्सटेंशन के बिना किया जा सकता है। मैंने उस विकल्प को शामिल करने के लिए अपना जवाब संपादित किया है। – tolism7