मैं डेटाटेबल पंक्तियों के लूप के भीतर विशिष्ट डेटारो को कैसे हटा सकता हूं जो कस्टम स्थिति को पूरा करते हैं -लेट्स का कहना है कि पंक्तियों की संख्या भी है-? (LINQ का उपयोग कर के बिना)डेटाटेबल में एकाधिक पंक्तियों को कैसे हटाएं?
धन्यवाद
मैं डेटाटेबल पंक्तियों के लूप के भीतर विशिष्ट डेटारो को कैसे हटा सकता हूं जो कस्टम स्थिति को पूरा करते हैं -लेट्स का कहना है कि पंक्तियों की संख्या भी है-? (LINQ का उपयोग कर के बिना)डेटाटेबल में एकाधिक पंक्तियों को कैसे हटाएं?
धन्यवाद
यह आप 'नष्ट' से क्या मतलब है पर निर्भर करता है की तरह कुछ की कोशिश करो।
आप उन्हें नष्ट कर दिया के रूप में, के रूप में आप इसे अपने पाश में यात्रा सिर्फ प्रत्येक पंक्ति पर Delete()
विधि कॉल मतलब है। हटाए जाने के लिए आपको डेटा तालिका पर AcceptChanges()
पर कॉल करने की आवश्यकता है - संभावित रूप से आपके डेटाबेस को अपडेट करने के बाद (यदि कोई शामिल है)।
foreach(DataRow row in someTable.Rows)
{
if(/* your condition here */)
row.Delete();
}
someTable.AcceptChanges();
तुम्हारा मतलब तो DataTable से हटाने, तो आपके पास दो गुजरता में ऐसा करने की जरूरत है:
List<DataRow> rowsToDelete = new List<DataRow>();
foreach(DataRow row in someTable.Rows)
{
if(/* your condition here */)
{
rowsToDelete.Add(row);
}
}
foreach(DataRow row in rowsToDelete)
{
someTable.Rows.Remove(row);
}
यह उनका कहना है कि आप हमेशा पंक्तियों को हटाने के लिए पहली विधि का उपयोग कर सकते हैं लायक है - Deleted
के रूप में पंक्तियों को चिह्नित करने के बाद और फिर परिवर्तनों को स्वीकार करने से उन्हें तालिका से स्वचालित रूप से हटा दिया जाएगा। लेकिन, कभी-कभी Rows
संग्रह से DataRow
ऑब्जेक्ट को निकालने के लिए यह अधिक स्पष्ट और कुशल है।
इस उदाहरण
DataTable table = new DataTable();
table.Columns.Add("Foo",typeof(int));
for (int i = 0; i < 10; i++)
table.Rows.Add(i);
for (int i = table.Rows.Count -1; i >=0; i--)
{
// sample removes all even foos
if ((int)table.Rows[i]["Foo"] % 2 == 0)
table.Rows.RemoveAt(i);
}
चयन() के परिणाम पर पुनरावृत्ति करने का प्रयास करें। यह सुंदर अन्य उत्तर के समान है, लेकिन मैं इसे सबसे सीधा
DataRow[] r = table.Select();
for (int i = 0; i < r.Length; i++)
{
if (i % 2 == 0)
r[i].Delete();
}
कोशिश इस
foreach(DataRow oRow in YourDataTable.Rows)
{
if ("Check You Condition")
{
YourDataTable.Rows.Remove(oRow);
}
}
आप फ़ोरैच लूप के साथ इसके माध्यम से पुनरावृत्ति करते समय संग्रह को संशोधित नहीं कर सकते हैं। –
दूसरा रास्ता है
DataRow[] DrArrCheck = DataTableName.Select("ID > 0");
foreach(DataRow DrCheck in DrArrCheck)
{
DataTableName.Rows.Remove(DrCheck);
}
public static void DeleteRowsFromDataTable(DataTable dataTable, string columnName, string columnValue)
{
IEnumerable<DataRow> dataRows = (from t in dataTable.AsEnumerable()
where t.Field<string>(columnName) == columnValue
select t);
foreach (DataRow row in dataRows)
dataTable.Rows.Remove(row);
}
यह मैं कैसे किया है जब मैं इस मुद्दे में भाग गया।
Dim index As Integer = 0
Dim count As Integer = resultsDT.Rows.Count - 1
For i As Integer = 0 To count
If resultsDT.Rows(index).Item("something") = "something" Then
resultsDT.Rows(index).Delete()
resultsDT.AcceptChanges()
index = index - 1
End If
index = index + 1
i = i + 1
Next
मैं हमेशा LBushkin की 'दो चरण "दृष्टिकोण का इस्तेमाल किया और मैं अंत में फैसला किया कि यह यह इसके लिए एक समारोह लिखने के लायक था:
public delegate bool DataRowComparer(DataRow dr);
public static void RemoveDataRows(DataTable table, DataRowComparer drc)
{
List<DataRow> RowsToRemove = new List<DataRow>();
foreach (DataRow dr in table.Rows)
if (drc(dr))
RowsToRemove.Add(dr);
foreach (DataRow dr in RowsToRemove)
table.Rows.Remove(dr);
}
और अब मैं कोड की एक लाइन के साथ पंक्तियों को हटा सकते हैं (उदाहरण के लिए):
RemoveDataRows(dt, row => row["StringVal"].ToString() == "B" && (Int16)(row["NumberVal"]) >= 4);
मामले में यह किसी को भी मदद करता है ...
(और किसी भी तरीके furthe के लिए आर संक्षिप्त सराहना कर रहे हैं।)
आप ऊपर प्रस्तावित उन की तुलना में कम समाधान, परिणामों की सूची से अधिक पाशन, और sub(x)
की तरह एक लैम्ब्डा का उपयोग कर उन पंक्तियों में से प्रत्येक को निकालने का प्रयास करें।
dt.Select("Column1 > 0").ToList.ForEach(Sub(x) dt.Rows.Remove(x))
डेटाबेस या तो datatable.Rows.Remove (पंक्ति) या row.Delete करने के लिए की तुलना में कॉपी करने के लिए (100,000 से बाहर उदाहरण 50,000 के लिए) एकाधिक पंक्तियों को हटाने के लिए यह है बहुत जल्दी()। उदाहरण के लिए:
DataRow[] rowsToKeep = datatable.Select("ID > 50000");
DataTable tempDataTable= rowsToKeep.CopyToDataTable;
dataTable.Clear();
dataTable.Merge(tempDataTable);
tempDataTable.Dispose();
+1 को हटा दें, तो इससे थोड़ा चिंता हो रही है !! – Jithu
यदि आप एलबीशकिन के जैसा ही करते हैं, तो आप निम्नानुसार देखेंगे: संग्रह संशोधित किया गया था; गणना ऑपरेशन निष्पादित नहीं हो सकता है। तो यह गलत है। – Szjdw
जब तक आप कॉल करते हैं .कृतियों को चिह्नित करने से पहले पंक्तियों को चिह्नित करने से पहले। (फ़ोरैच लूप से पहले) तो आपको "संग्रह संशोधित किया गया था; गणना ऑपरेशन निष्पादित नहीं हो सकता" त्रुटि प्राप्त नहीं होगी। त्रुटि प्रकट होती है क्योंकि लंबित परिवर्तन हैं जिन्हें स्वीकार करने की आवश्यकता है। यदि आप लूप के लिए उपयोग करते हैं तो इससे कोई फर्क नहीं पड़ता है, लेकिन उस स्थिति में पीछे की ओर फिर से चलना सबसे अच्छा होगा। – Soenhay