2012-10-22 13 views
48

मैं उपयोगकर्ताओं के बारे में जानकारी के साथ डेटाटेबल का उपयोग करता हूं और मैं इस डेटाटेबल में उपयोगकर्ता या उपयोगकर्ताओं की एक सूची खोजना चाहता हूं। मैं यह कोशिश butit काम नहीं करते :(मैं डेटाटेबल को कैसे फ़िल्टर कर सकता हूं?

यहाँ मेरी सी # कोड है:।

public DataTable GetEntriesBySearch(string username,string location,DataTable table) 
     { 
      list = null; 
      list = table; 

      string expression; 
      string sortOrder; 

      expression = "Nachname = 'test'"; 
      sortOrder = "nachname DESC"; 

      DataRow[] rows = list.Select(expression, sortOrder); 

      list = null; // for testing 
      list = new DataTable(); // for testing 

      foreach (DataRow row in rows) 
      { 
       list.ImportRow(row); 
      } 

      return list; 
     } 
+0

कोड काम कर रहा है या आपको कोई त्रुटि मिलती है? – Karthik

+0

क्या आप इस बात पर विस्तार कर सकते हैं कि वास्तव में क्या काम नहीं करता है? क्या आपको अपवाद मिलता है या आपको 0 परिणाम मिलते हैं (2 अलग-अलग चीजें)? – James

उत्तर

78

आप डेटा व्यू का उपयोग कर सकते हैं।

DataView dv = new DataView(yourDatatable); 
dv.RowFilter = "query"; // query example = "id = 10" 


http://www.csharp-examples.net/dataview-rowfilter/

+0

बिल्कुल मुझे क्या चाहिए! उदाहरण लिंक के लिए धन्यवाद! –

4

यह इस कार्य के लिए DataView उपयोग करने के लिए बेहतर है

इसे प्रयोग का उदाहरण आप में पा सकते हैं इस पोस्ट: How to filter data in dataview

73

आप कम से कम .NET 3.5 का उपयोग कर रहे हैं, तो मैं Linq-To-DataTable उपयोग करने के लिए सुझाव है कि बजाय, क्योंकि यह बहुत अधिक पठनीय और शक्तिशाली है:

DataTable tblFiltered = table.AsEnumerable() 
      .Where(row => row.Field<String>("Nachname") == username 
        && row.Field<String>("Ort") == location) 
      .OrderByDescending(row => row.Field<String>("Nachname")) 
      .CopyToDataTable(); 

ऊपर कोड सिर्फ एक उदाहरण है, वास्तव में आपके पास many more methods available है।

using System.Linq; जोड़ने का ध्यान रखें और AsEnumerable विस्तार विधि के लिए System.Data.DataSetExtensions dll (How) के लिए एक संदर्भ।

+2

सावधानी के नोट - CopyToDataTable() datarows की प्रतिलिपि बनाता है। यह क्लोन ऑपरेशन नहीं है, इसलिए मूल तालिका से कुछ गुणों को कॉपी नहीं किया गया है उदा। तालिका का नाम –

+1

@Tim: इस कोड के प्रदर्शन बिंदु के बारे में क्या? क्या कुछ ऑब्जेक्ट सूची में स्टोर करना बेहतर है और फिर linq/lambda लागू करें? –

+2

@ राजेश मिश्रा: यदि आपके पास पहले से भरा 'डेटाटेबल' है तो इसे रखें। अन्यथा मैं 'सूची ' पसंद करूंगा क्योंकि आपके पास कोई मुक्केबाजी/अनबॉक्सिंग नहीं है। एक 'डेटाटेबल' सबकुछ के लिए 'System.Object' का उपयोग करता है ताकि आपको हमेशा कास्ट करना पड़े। सार्थक गुणों के साथ एक कस्टम वर्ग होने के अलावा पठनीयता के अलावा कई और फायदे हैं। –

9

स्पष्ट:

list = null; // for testing 
list = new DataTable(); // for testing 

foreach (DataRow row in rows) 
{ 
    list.ImportRow(row); 
} 

उपयोग:

.CopyToDataTable() 

उदाहरण:

string _sqlWhere = "Nachname = 'test'"; 
string _sqlOrder = "Nachname DESC"; 

DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable(); 
+1

क्या आप थोड़ा और विस्तार से समझा सकते हैं कि यह सवाल पूछने का उत्तर क्यों है? –

5

सभी लोग जिनके (सिर्फ मामले में) VB.NET में काम के लिए

Dim dv As DataView = yourDatatable.DefaultView 

dv.RowFilter ="query" ' ex: "parentid = 0" 
0

हाय हम विधि ToLower का उपयोग कभी कभी यह फ़िल्टर नहीं है सकते हैं।

EmployeeId = Session["EmployeeID"].ToString(); 
var rows = dtCrewList.AsEnumerable().Where 
    (row => row.Field<string>("EmployeeId").ToLower()== EmployeeId.ToLower()); 

    if (rows.Any()) 
    { 
     tblFiltered = rows.CopyToDataTable<DataRow>(); 
    } 
संबंधित मुद्दे

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