2009-10-08 20 views
22

मेरे पास दो टेबल हैं: वर्कइटम टेबल, और वर्कइटम नोट तालिका। मैं वर्कइटम और सभी वर्कइटम नोट्स कैसे लौटा सकता हूं जो एक निश्चित मानदंड को पूरा करते हैं?सशर्त के साथ ईएफ क्वेरी

मुझे लगता है कि यह सरल होना चाहिए, लगभग एक सशर्त "शामिल" की तरह, सही?

उत्तर

38

मैं इस पर a tip लिखने की योजना बना रहा हूं लेकिन आपका प्रश्न मुझे पंच पर मार देता है।

var intermediary = (from item in ctx.WorkItems 
       from note in item.Notes 
       where note.SomeProp == SomeValue 
       select new {item, note}).AsEnumerable(); 

यह प्रत्येक WorkItemNote कि मैच के लिए एक गुमनाम तत्व पैदा करता है, और भी इसी WorkItem रखती है:

एक WorkItem मान लिया जाये कि कई WorkItemNotes

आप ऐसा कर सकते हैं।

ईएफ पहचान संकल्प बीमा करता है कि उसी WorkItem (संदर्भ द्वारा) कई बार लौटाया जाता है यदि उसके पास एकाधिक WorkItemNotes मानदंडों से मेल खाते हैं।

मुझे लगता है कि अगले तुम सिर्फ वापस बस WorkItems को पाने के लिए, इस तरह हैं: अगर तुम अब क्या यह तब

var workItems = intermediary.Select(x => x.item).Distinct().ToList(); 

:

foreach(var workItem in workItems) 
{ 
    Console.WriteLine(workItem.Notes.Count) 
} 

आपको लगता है कि WorkItemNotes से मेल खाने वाले देखेंगे मूल फ़िल्टर प्रत्येक workItem के नोट्स संग्रह में जोड़ा गया है।

यह रिलेशनशिप फ़िक्सअप नामक किसी चीज़ की वजह से है।

आईई। यह आपको वह देता है जो आप सशर्त शामिल करना चाहते हैं।

आशा इस

Alex

+0

सच में मदद करता है? x.Item के पास उपयुक्त WorkItemNotes होगा? वह तो कमाल है! मुझे खुशी है कि आपने इसे पोस्ट किया क्योंकि मैं वर्तमान में प्रत्येक वर्कइटम के लिए डीबी से पूछताछ करता हूं। धन्यवाद! –

+0

एक प्रश्न: मध्यस्थ को आईनेमरेबल क्यों होना चाहिए? क्या यह IQueryable हो सकता है? –

+0

येप यह काम करता है। आप इसे अन्य युक्तियों के लिए भी इस्तेमाल कर सकते हैं, जैसे सॉर्टिंग, मेरी टिप्स श्रृंखला के टिप 1 देखें! –

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