2012-04-25 16 views
6

से फ़िल्टर किए गए डेटा प्राप्त करें मैं डेटासेट से डाटाबेस को डेटा कैसे फ़िल्टर कर सकता हूं? code- की तरह>डेटासेट से डेटाटेबल

DataRow[] dr = DS.Tables[0] 
    .Select("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");   

मैं कैसे datatable यहाँ उपयोग कर सकते हैं?

निम्नलिखित कोड doesn `t बदलाव को प्रतिबिंबित>

DataTable FilteredDataD = DS.Tables[0]; 
if (FilteredDataD.Rows.Count > 0) { 
    FilteredDataD.DefaultView.RowFilter = "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"; 
    FilteredDataD.DefaultView.ToTable(); 
} 

है फिल्टर ऊपर का उपयोग कर एक कॉलम निकालने के लिए संभव है, जैसे" STAGENAME = 'का विकास' और DEVLAPSEDAYS शून्य नहीं है "+ FilteredDataD.column (" col_name ") ... मान लीजिए कि मेरे पास 5 कॉलम केवल 4 प्रदर्शित हैं, मैं अपनी क्वेरी से col_name को हटा नहीं सकता हूं। क्या कोई तरीका है?

उत्तर

उत्तर

11

बजाय LINQ उपयोग करके देखें:

var table = DS.Tables[0].AsEnumerable().Where(
    r => r.Field<string>("STAGENAME") == "Develop" && r.Field<int?>("DEVLAPSEDAYS").HasValue).AsDataView().ToTable(); 

संपादित वाक्य-सटीकता के लिए AsDataView() करने के लिए AsDataView बदल दिया है।
संपादित परंतु .NET 2.0 संगत समाधान

DataTable table = DS.Tables[0]; 
if (table.Rows.Count > 0) 
{ 
    table.DefaultView.RowFilter = "STAGENAME = 'DEVELOP' AND DEVLAPSEDAYS IS NOT NULL"; 
    table = table.DefaultView.ToTable(); 
} 
+0

जेम्स, AsEnumerable() नहीं कर सका .net 2.0 का उपयोग कर मेरी वी.एस., मैं 'मी में मिल version.Reply – palak

+0

@JamesJohnson +1, मैं" दृश्य "के बारे में पता डेटासेट और इस तरह के पर इस्तेमाल किया जा रहा wan't। यह एक अच्छा समाधान है। – Matt

+0

@ जेम्स जॉन्सन: हाय जेम्स उत्तर के लिए धन्यवाद, लेकिन यह मेरे लिए काम नहीं कर रहा है, फ़िल्टरिंग नहीं हो रही है। – palak

6

आप एक विस्तार विधि लिख सकता है (का उपयोग करते हुए सी # 3) की तरह इस प्रकार है:

public static DataTable Filter(this DataTable dataTable, string selectFilter) 
{ 
    var filteredTable = dataTable.Clone(); 
    var rows = dataTable.Select(selectFilter).ToList(); 
    rows.ForEach(filteredTable.ImportRow); 
    return filteredTable; 
} 

फिर इसे पसंद का उपयोग इस प्रकार है:

DataTable dataTable = DS.Tables[0] 
    .Filter("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 

अद्यतन, चूंकि आपने कहा है कि आप सी # 2.0 का उपयोग कर रहे हैं (और इस प्रकार एक्सटेंशन विधियों और LINQ हैं 'टी एक विकल्प) आप के बजाय इस इस्तेमाल कर सकते हैं:

public static DataTable GetFilteredTable(
    DataTable sourceTable, string selectFilter) 
{ 
    var filteredTable = sourceTable.Clone(); 
    var rows = sourceTable.Select(selectFilter); 
    foreach (DataRow row in rows) 
    { 
     filteredTable.ImportRow(row); 
    } 
    return filteredTable; 
} 

DataTable dataTable = GetFilteredTable(
    DS.Tables[0], "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 
+0

मैट, उत्तर के लिए धन्यवाद, मैं 'ToList() के लिए संदर्भ नहीं मिल रहा, मैं' सी # 2.0 .. – palak

+0

@palak, का उपयोग करते हुए मेरा उत्तर अद्यतन । – Matt

+0

@ मैट: आपका पहला उत्तर 'DataTable.DefaultView.RowFilter' क्या करने का एक चौराहे तरीका है। –

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