2012-02-02 25 views
5

किसी कारण से मैं क्वेरी नहीं बदल सकता इसलिए मुझे इसे सी # में करना है।एक सामान्य सूची से संपत्ति/कॉलम निकालें

public class myClass 
{ 
    int id { get; set; } 
    string name { get; set; } 
    DateTime sDate { get; set; } 
    bool status { get; set; } 
} 

डेटा मैं हो रही है इस सूची में लाई गई है:

मैं एक वर्ग है। अब मैं चाहता हूं कि उन गुणों को उस सूची से हटा दें जिसमें null मान हैं। मैं पागल लग सकता हूं लेकिन आप इसे सही पढ़ते हैं। मैंने केवल चयनित गुणों के साथ एक और सूची बनाने का विचार किया, लेकिन उपरोक्त में से कोई भी गुण null हो सकता है। तो मुझे इस पर आधारित मेरी सूची फ़िल्टर करने के लिए एक तंत्र तैयार करना है।

अधिक स्पष्टता के लिए निम्नलिखित उदाहरण पर विचार करें। संपत्ति हटाने के बाद

Id Name Sdate status 
1 a null null 
2 b null null 
3 c null false 

मैं कुछ कैसे कर सकता हूँ मेरी सूची में इस तरह दिखेगा:

List<myClass> lstClass = some data source. 

डेटा सामान्य सूची प्राप्त करने के बाद (lstClass) this.Consider की तरह परिणाम एक तालिका में सेट लग रहा है sdate। तो नई सूची जिसे मैं बनाना चाहता हूं, में केवल तीन गुण होना चाहिए।

Id Name status 
1 a null 
2 b null 
3 c false 

कोई विचार? क्या मैं लिंक का उपयोग कर ऐसा कर सकता हूं?

पीएस: इसका प्रस्तुति के साथ कुछ लेना देना नहीं है। मेरे पास ग्रिड नहीं है जहां मैं कॉलम छुपाने में सक्षम नहीं हूं जो मैं नहीं ढूंढ रहा हूं।

+1

आपका प्रश्न बहुत अस्पष्ट है - यह बिल्कुल स्पष्ट नहीं है कि परिणाम के रूप में आप किस प्रकार की सूची के बारे में बात कर रहे हैं। इससे आपकी मदद भी होगी यदि आप अपना सी # कोड वैध बनाते हैं और इसे .NET नामकरण सम्मेलनों का पालन करते हैं। –

+1

निश्चित रूप से आपके पास दिए गए डेटा को प्रदर्शित करने के तरीके के साथ और अधिक करना है, जैसा कि आपके पास डेटा है? –

+0

मैं नामकरण सम्मेलन के संबंध में पोस्ट संपादित करूंगा, मैंने परिदृश्य को दर्शाने के लिए एक डमी उदाहरण तैयार किया है। – ankur

उत्तर

15

मान लिया जाये कि आप myClass उदाहरणों में से एक सामान्य सूची है, आप केवल जरूरत गुणों के साथ एक अनाम प्रकार बना सकते हैं:

List<myClass> list = ...; 
var reducedList = list.Select(e => new {e.id, e.name, e.status}).ToList(); 
// note: call to ToList() is optional 

foreach (var item in reducedList) 
{ 
    Console.WriteLine(item.id + " " + item.name + " " + item.status); 
    //note: item does not have a property "sDate" 
} 
+2

+1 बेनामी प्रकार बचाव के लिए। –

+2

@ एम 4 एन लेकिन मुझे नहीं पता कि कौन सा कॉलम खाली होगा, इसलिए मैं इसे हार्ड कॉर्ड नहीं कर सकता। क्या आप एक उदाहरण प्रदान कर सकते हैं जहां आप पहले कॉलम नाम का हिस्सा निर्धारित करते हैं जिसे अनाम वर्ग में पारित किया जाना है। – ankur

0

मुझे यकीन है कि आप डेटा में आपकी समस्या का समाधान करना चाहिए नहीं कर रहा हूँ, बल्कि यह है एक प्रस्तुति समस्या। आप किस नियंत्रण में इसे प्रदर्शित करना चाहते हैं? आइए मान लें कि आप इसे DataGrid में AutoGenerateColumns = True के साथ प्रदर्शित करते हैं, फिर आप 1) कॉलम/गुणों पर लूप कर सकते हैं 2) प्रत्येक कॉलम/प्रॉपर्टी के लिए देखें कि सभी पंक्तियों के लिए सभी संपत्ति मान शून्य हैं और यदि कॉलम की दृश्यता को संक्षिप्त करने के लिए सेट किया गया है। यदि आप अपने कॉलम स्वयं को जेनरेट करते हैं तो यह भी आसान है: केवल पंक्तियों को जोड़ें जब सामग्री सभी पंक्तियों के लिए शून्य न हो।
यदि आपकी डीबी सामग्री गतिशील है, तो हो सकता है कि आप प्रत्येक पंक्ति की दृश्यता को उस संपत्ति पर बांधना चाहें जो गीलेर को बताएगी कि सभी पंक्तियां उस संपत्ति के लिए शून्य हैं या नहीं। इस पर निर्भर करते हुए कि आप अपने कोड को कितना सामान्य बनाना चाहते हैं, कोड बहुत अलग हो सकता है, और यदि आप जेनेरिक समाधान चाहते हैं, तो प्रतिबिंब/प्राप्त/सेट गुणों को प्रतिबिंबित करने के लिए प्रतिबिंब का उपयोग करके कुछ उपयोग किया जा सकता है।

+0

कोई नहीं यह मामला नहीं है। – ankur

+0

समाधान पाने के लिए अन्य लोगों की सलाह सुनने की आपकी क्षमता काफी प्रभावशाली है। – GameAlchemist

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