हम कक्षाओंLinq संस्थाओं के लिए - EntityCollection नेविगेशन गुण में खोज
public Invoice: EntityObject
{
public EntityCollection<InvoicePosition> Positions { get {...}; set{...}; }
...
}
public InvoicePosition: EntityObject
{
public string GroupName { get {...}; set{...}; }
}
हम IQueryable<Invoice>
दिया जाता है, तो हम IQueryable<InvoicePosition>
नहीं दिया जाता है। मुझे उन चालानों को कैसे ढूंढना चाहिए जिनके पास पद हैं, जहां ग्रुपनाम 'ईंधन' है?
IQueryable<Invoice> invoices = InvoiceRepository.List();
IQueryable<Invoice> invoicesThatHaveFuelPositions =
from i in invoices
where ?
select i
EntityFramework इसे उचित एसक्यूएल क्वेरी में अनुवाद करने में सक्षम होना चाहिए।
संपादित
के रूप में मार्क सीनैन लिखा था, मैं उपयोग कर सकते हैं:
IQueryable<Invoice> invoices = InvoiceRepository.List().Include("Positions").Include("OtherInclude");
IQueryable<Invoice> invoicesThatHaveFuelPositions =
from i in invoices
from p in i.Positions
where p.GroupName = 'Fuel'
select i;
एक समस्या है। जब मैं इस फ़िल्टरिंग का उपयोग करता हूं, तो मैं "अन्य शामिल" खो देता हूं। मुझे लगता है कि ईएफ का उपयोग करते समय फ़िल्टरिंग का यह उचित तरीका नहीं है। मुझे इसे बदलना होगा:
IQueryable<Invoice> invoices = InvoiceRepository.List().Include("Positions").Include("OtherInclude");
IQueryable<Invoice> invoicesThatHaveFuelPositions = invoices.Where(???);
लेकिन मुझे कहां लिखना चाहिए?
संपादित
बदल दिया शामिल करें ("स्थिति") ("पदों") शामिल करने के लिए।
IQueryable<Invoice> invoicesThatHaveFuelPositions =
from i in invoices
where i.Positions.Any(p => p.GroupName == 'Fuel')
select i;
यह काम करने के लिए लगता है और प्रभावित नहीं करता है एफई में शामिल हैं:
संपादित
एलेक्स जेम्स टिप (http://blogs.msdn.com/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx), जिससे पता चलता है के लिए लिंक दे दी है।
इस टिप के लिए धन्यवाद। अंत में शामिल करना समस्याग्रस्त है, क्योंकि मैं रिपोजिटरी पैटर्न का उपयोग करता हूं और इसमें पहले लागू होते हैं। मध्य समाधान (किसी भी() का उपयोग करके मुझे फिट बैठता है। – LukLed