मेरे पास दो टेबल हैं रिपोर्ट और रिपोर्टडेटा ReportData में एक constraint ReportID है।
सभी रिपोर्ट ऑब्जेक्ट्स को वापस लाने के लिए मैं कैसे अपनी लिनक्स क्वेरी लिख सकता हूं, जहां रिपोर्ट की रिपोर्ट्स ReportData के लिए मिलती हैं? एसक्यूएल में ऐसा कुछ:
चुनें आरआर के रूप में रिपोर्ट से r जहां। सेवा आईडी = 3 और r.ReportID IN (ReportData से ReportID चुनें, जहां 'कुछ%' जैसे JobID चुनें)
इस तरह से मैं अपनी परिभाषा का निर्माण कर रहा हूं:
अभिव्यक्ति & lt; फ़नक & lt; रिपोर्टडेटा, बूल & gt; & gt; Predicate = PredicateBuilder.True & lt; रिपोर्टडेटा & gt; (); Predicate = predicate.And (x = & gt; x.JobID.StartsWith (QueryConfig.Instance.DataStreamName)); Var q = engine.GetReports (बिंदू, रिपोर्ट डेटाकॉन्टेक्स); रिपोर्ट = q.ToList ();
यह इस समय मेरी क्वेरी निर्माण है:
सार्वजनिक ओवरराइड IQueryable & lt; रिपोर्ट & gt; GetReports (अभिव्यक्ति & lt; Func & lt; ReportData, bool & gt; predicate, LLReportsDataContext रिपोर्ट डीसी) {यदि (reportDC == रिक्त) नए तर्क को दोहराएं ("reportDC"); Var q = reportDC.ReportDatas.Where (predicate)। जहां (आर = & gt; आर। सेवा आईडी। एक्लॉल्स् (1))। चुनें (आर = & gt; आर। रिपोर्ट); वापसी q; }
मैंने निम्नलिखित के रूप में अच्छी तरह से करने की कोशिश की है: सार्वजनिक ओवरराइड IQueryable GetReports (अभिव्यक्ति> पूर्वानुमान, LLReportsDataContext reportDC) {यदि (reportDC == रिक्त) नए ArgumentNullException ("reportDC") को फेंकें ;
var q = रिपोर्ट में आर डीसी.रपोर्ट्स जहां r.ServiceID.Equals (1) जहां r.ReportDatas.Where (predicate.Compile ())। चुनें (x = & gt; r .ReportID)। शामिल हैं (आर। रिपोर्टिंग) आर चुनें; वापसी q; }
हालांकि, मुझे यह अपवाद मिलता है: "क्वेरी ऑपरेटर के लिए असमर्थित अधिभार का उपयोग 'कहां'।"
UPDATE यह तय किया गया :
var q = reportDC.Reports.AsExpandable ()। जहां (आर = & gt; आर। रिपोर्टडेटा। कोई (predicate.Compile ()))। जहां (आर = & gt; आर। सेवा आईडी। एक्लॉल्स (1));
क्वेरी
रिपोर्टडाटा। जहां (रिपोर्ट डेटा = & Gt; रिपोर्ट डेटा। स्टार्ट्स ("कुछ%") & amp; रिपोर्ट डेटा। रिपोर्ट करें। आईडी == 3)। चयन करें (रिपोर्ट डेटा = & gt; रिपोर्ट डेटा। रिपोर्ट करें)। निस्संदेह ()
AboutLinqKit
LinqKit का उपयोग करते समय, कभी-कभी आपको यूनिट संग्रह में asExpandable ()
को कॉल करने की आवश्यकता होती है और प्रदीप्त अभिव्यक्ति संकलित करने के लिए। यह उदाहरण देखें:):
Comments
Post a Comment