2013-12-17 7 views
25

साथ datatable मैं दो स्तंभ में पंक्ति खोजें:एक datatable में विशिष्ट आईडी

ID, Calls. 

मैं कैसे प्राप्त कर सकता क्या कॉल का मूल्य where ID = 5 है?

5 कुछ भी हो सकता है, यह सिर्फ उदाहरण के लिए है। प्रत्येक पंक्ति में एक अद्वितीय आईडी है।

+0

क्या आप इसे चयनित कथन के हिस्से के रूप में नहीं कर सके? "चयन आईडी, MyTable कहां से कॉल करता है आईडी = @ id_search"। फिर बस डेटाबेस कॉल पर "@id_search" पैरामीटर प्रदान करें। यह LINQ से तेज़ होने जा रहा है, विशेष रूप से मानते हुए आईडी प्राथमिक कुंजी या अनुक्रमित है। –

+0

डेटाबेस नहीं, डेटासेट/डेटाटेबल मैं डरता हूं। – RSM

उत्तर

45

इस तरह, के लिए खोज करने के लिए एक स्ट्रिंग मापदंड करें:

string searchExpression = "ID = 5" 

फिर DataTable की .Select() विधि का उपयोग वस्तु, इस तरह:

DataRow[] foundRows = YourDataTable.Select(searchExpression); 

अब आप परिणाम है, इस तरह के माध्यम से लूप कर सकते हैं:

int numberOfCalls; 
bool result; 
foreach(DataRow dr in foundRows) 
{ 
    // Get value of Calls here 
    result = Int32.TryParse(dr["Calls"], out numberOfCalls); 

    // Optionally, you can check the result of the attempted try parse here 
    // and do something if you wish 
    if(result) 
    { 
     // Try parse to 32-bit integer worked 

    } 
    else 
    { 
     // Try parse to 32-bit integer failed 

    } 
} 
+0

यह मुझे डाटरो देता है, लेकिन मुझे कॉलम कॉल – RSM

+0

@RyanMurphy से विशिष्ट मान कैसे प्राप्त होता है - यह दिखाने के लिए अद्यतन किया गया कि पंक्ति से मूल्य कैसे प्राप्त करें और मूल्य को पार्स करने का सुरक्षित प्रयास करें। –

+0

आपकी मदद के लिए धन्यवाद – RSM

33

आप के बाद से प्रत्येक पंक्ति की अनन्य आईडी है/डेटासेट के लिए LINQ का उपयोग कर सकते DataTable

var rows = dt.AsEnumerable() 
       .Where(r=> r.Field<int>("ID") == 5); 

, आप Single/SingleOrDefault का उपयोग करना चाहिए जो अपवाद फेंक यदि आप कई रिकॉर्ड वापस मिल जाएगा।

DataRow dr = dt.AsEnumerable() 
       .SingleOrDefault(r=> r.Field<int>("ID") == 5); 

(स्थानापन्न int अपने आईडी क्षेत्र के प्रकार के लिए)

+1

कुछ समय इस तालिका का उपयोग करके तालिका से पंक्तियों का चयन करने में असमर्थ है "DataRow [] foundRows = YourDataTable.Select (searchExpression);"। लेकिन जब मैं LINQ का उपयोग कर रहा हूँ। यह अच्छा काम कर रहा है। धन्यवाद हबीब। –

+1

धन्यवाद! मुझे LINQ पसंद है। –

3
DataRow dataRow = dataTable.AsEnumerable().FirstOrDefault(r => Convert.ToInt32(r["ID"]) == 5); 
if (dataRow != null) 
{ 
    // code 
} 

यदि यह एक टाइप डेटासेट है:

MyDatasetType.MyDataTableRow dataRow = dataSet.MyDataTable.FirstOrDefault(r => r.ID == 5); 
if (dataRow != null) 
{ 
    // code 
} 
11

आप विधि के साथ की कोशिश कर सकते चयन

DataRow[] rows = table.Select("ID = 7"); 
0

इस कोड को आजमाएं

DataRow foundRow = FinalDt.Rows.Find(Value); 

लेकिन पट्टा पर सेट एक प्राथमिक कुंजी

1

नमस्ते बस एक साधारण समारोह के रूप में नीचे दिखाया गया लग रहा है कि .. सभी पंक्तियों जहां कॉल पैरामीटर डाला, वह मान्य या सच है कि रिटर्न पैदा करते हैं।

public DataTable SearchRecords(string Col1, DataTable RecordDT_, int KeyWORD) 
    { 
     TempTable = RecordDT_; 
     DataView DV = new DataView(TempTable); 
     DV.RowFilter = string.Format(string.Format("Convert({0},'System.String')",Col1) + " LIKE '{0}'", KeyWORD); 
     return DV.ToTable(); 
    } 

और बस इसे नीचे दिखाए गए अनुसार कॉल करें;

DataTable RowsFound=SearchRecords("IdColumn", OriginalTable,5); 

जहां 5 आईडी है। धन्यवाद ..

4

मैं निम्नलिखित कोड का उपयोग कर सकता हूं। सभी को धन्यवाद।

int intID = 5; 
DataTable Dt = MyFuctions.GetData(); 
Dt.PrimaryKey = new DataColumn[] { Dt.Columns["ID"] }; 
DataRow Drw = Dt.Rows.Find(intID); 
if (Drw != null) Dt.Rows.Remove(Drw); 
0

अनावश्यक लूप से बचने की कोशिश करें और यदि आवश्यक हो तो इसके लिए जाएं।

string SearchByColumn = "ColumnName=" + value; 
DataRow[] hasRows = currentDataTable.Select(SearchByColumn); 
if (hasRows.Length == 0) 
{ 
    //your logic goes here 
} 
else 
{ 
    //your logic goes here 
} 

यदि आप विशिष्ट आईडी द्वारा खोजना चाहते हैं तो तालिका में प्राथमिक कुंजी होनी चाहिए।

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