Linq

2009-06-17 8 views
8

में सभी बच्चे वस्तुओं का चयन यह वास्तव में आसान होना चाहिए, लेकिन मैं सिर्फ यह पता अपने आप काम नहीं कर सकता, इंटरफ़ेस काफी सहज नहीं है ... :(Linq

चलो कहते हैं कि मैं एक State तालिका चलाते हैं और मैं कई States से सभी Counties का चयन करना चाहते एसक्यूएल में होगा:।

select c.* 
    from State s join County c on c.StateCode = s.StateCode 
where s.TimeZone = -5 -- or some other criteria 

ऊपर के उदाहरण काफी तुच्छ एक स्थिर संदर्भ में Linq में बदलने के लिए है:

var q = MyDataContext.GetTable<County>().Where(c => c.State.TimeZone = -5); 

लेकिन जहां यह जटिल हो रही शुरू होता है अगर मैं इस तरह के निम्नलिखित के रूप में एक और अधिक संदर्भ संवेदनशील क्वेरी चाहते हैं,:

public static List<County> GetCountiesForStates(List<State> states) { 
    // gotta do something to return all the counties for all these states 
} 

अब मुझे लगता है कि विधि के अंदर कुछ इस तरह कर सकता है:

var q = MyDataContext.GetTable<County>().Where(c => states.Contains(c.State)); 

लेकिन IMO यह वास्तव में सुरुचिपूर्ण है, क्योंकि (ए) मुझे राज्य वस्तुओं के अंतर्निहित डेटा संदर्भ का उपयोग करने के बजाय स्थिर MyDataContext प्राप्त करना होगा और (बी) आप पीछे की ओर काम कर रहे हैं, और यदि आप आगे की क्वेरी को जटिल बनाना शुरू करते हैं तो यह भी उलझन में पड़ता है।

वहाँ के साथ क्वेरी शुरू करने का एक तरीका है:

var q = states... // or "from s in states..." 

सहज, मैं तुम्हें ऐसा कर सकते हैं विश्वास करने के लिए चाहते हैं, लेकिन मैं अभी तक जिस तरह से नहीं मिला है ...

उत्तर

26

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

var q = from c in countries 
     from s in c.States 
     where c.Property == Something 
     select s; 

यह आपको सभी देशों के सभी राज्यों का गणित देगा। यह निम्नलिखित में अनुवाद करता है:

var q = countries.Where(x => c.Property == Something).SelectMany(c => c.States); 
+4

+1 लैम्ब्डा विस्तार सहित। –

+0

बस जो मैं चाहता था - धन्यवाद! –

+3

बस एक छोटा टाइपो - "देश होना चाहिए। जहां (सी => सी। प्रॉपर्टी) आदि ... –

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