2015-11-18 5 views
5

मैं इस तरह एक struct है:कहाँ सूची में Linq में खंड ग #

List<Test> testList=new List<Test>(); 

मैं इस तरह एक LINQ अभिव्यक्ति है: मेरे कोड में

struct Test 
{ 
    string name; 
    string family; 
    public Test... 
} 

मैं इस struct की एक सूची है:

var list =testList.Select(n=>n.Name); 

लेकिन मैं इस चयन को टेस्टलिस्ट के परिवार द्वारा कैसे फ़िल्टर कर सकता हूं? कुछ इस तरह:

var list=testList.Select(n=>n.Name).Where(f=>f.Family==""); 

इस कहां खंड केवल चयनित नाम जो स्ट्रिंग

कोई भी विचार कैसे ऐसा करने के लिए की एक सूची रहे हैं पर लागू होता है?

+0

'Select' निकालें। –

+1

या इसे 'कहां' के बाद ले जाएं। –

उत्तर

9

बस Select से पहले Where डाल:

var list=testList.Where(f=>f.Family=="").Select(n=>n.Name); 

Linq में आप पेश (जब तक फिल्टर प्रक्षेपण के बजाय मूल संग्रह के परिणामों पर लागू होता है) से पहले फिल्टर आवेदन करना होगा।

4

फ़िल्टर Where उपयोग करने से पहले आप सिर्फ एक संपत्ति Select का उपयोग कर का चयन करें। इस तरह, आप अभी भी पूर्ण वस्तु मिलती है:

testList.Where(t => t.Family == "").Select(t => t.Name) 

सब के बाद, Select वस्तु ले जाएगा और उसके बाद ही आप जो कुछ भी लैम्ब्डा में लौटने पर गुजरती हैं। इस मामले में, आप केवल एक स्ट्रिंग लौटते हैं, इसलिए आप Test ऑब्जेक्ट से अन्य सभी जानकारी फेंक देते हैं। और इस तरह, जिस सूचना को आप फ़िल्टर करना चाहते हैं वह अब उपलब्ध नहीं है।

आप स्विच करते हैं कि चारों ओर, आप परीक्षण वस्तु पर फ़िल्टर कर सकते हैं, और उसके बाद ही यह है कि एक स्ट्रिंग लौटाने।

1

आम तौर पर जब मैं उस तरह एक खाली मूल्य के लिए जाँच कर रहा हूँ, मैं सिर्फ मामले में string.IsNullOrEmpty() उपयोग करते हैं, करेंगे।

testList.Where(f=> string.IsNullOrEmpty(f.Family)).Select(n=>n.Name); 
संबंधित मुद्दे