मान लें कि मेरी ऑब्जेक्ट सही कार्य क्रम में हैं (यानी टीडीडी मुझे लगता है कि वे काम करते हैं)।स्थानीय चर के बिना प्रोग्रामिक रूप से LINQ क्वेरी का निर्माण करना मुझे
मैं एक है कि मैं (ठीक से इंडेंट को छोड़कर) इस प्रकार बना सूची है:
var result = from v in vendors
from p in v.Products
orderby p.Name
select p;
यह काम करता है - मैं सभी विक्रेताओं से सभी उत्पादों मिलता है।
अब मेरे पास उपयोगकर्ता द्वारा रनटाइम पर बनाए गए स्थितियों की एक सूची है। आइए उन्हें लागू करें:
foreach (Attribute a in requiredAttributes)
{
result = result.Where(p => p.Attributes.Contains(a));
}
यह आदिम हो सकता है, लेकिन मैंने सोचा कि यह काम करेगा। हालांकि, इस फोरैच लूप के समाप्त होने के बाद, जब आप "परिणाम" की गणना करते हैं तो इसमें उन सभी उत्पादों को शामिल किया जाएगा जिनमें आवश्यक गुणों की अंतिम विशेषता है, इसकी विशेषता गुण (संग्रह भी) में।
मेरे लिए, यह "ए" की तरह बदबू आ रही है, प्रत्येक यात्रा के साथ लूप को कहीं भी ओवरराइट किया जाता है, और केवल अंतिम ही लागू होता है।
किसी भी तरह से IENumerable को एक एक्सटेंशन विधि लिखने के लिए संक्षिप्त कहा जाता है जिसे ContainsAll (IEnumerable) या उस प्रभाव से कुछ कहा जाता है, मैं जो चाहता हूं उसे प्राप्त कैसे कर सकता हूं, जो मूल रूप से एक तार्किक है और मुझे केवल उन उत्पादों को दे रहा है जिनमें सभी आवश्यक गुण हैं ?
धन्यवाद दोस्तों - मैं जॉन को "स्वीकृत उत्तर" दे रहा हूं क्योंकि ऐसा लगता है कि यह "सामान्य" मामले के लिए अधिक उपयुक्त हो सकता है। लेकिन मैं निश्चित रूप से ओमर के सुझाव की भी जांच करूँगा, आपको नहीं पता था कि आप ऐसा कर सकते हैं। सभी को वोट। :) –
इस समस्या को ठीक करने का नया तरीका केवल सी # 5 का उपयोग करना है। यह भी देखें [क्या सी # 5 में चर के चर का उपयोग बदल दिया गया है?] (Http://stackoverflow.com/a/12112959/18192) – Brian