Mam datatable i wiersz. Chcę zaimportować wiersz do datatable tylko wtedy, gdy nie istnieje w datatable.Sprawdź, czy istnieje wiersz w DataTable?
Jak mogę to zrobić?
Mam datatable i wiersz. Chcę zaimportować wiersz do datatable tylko wtedy, gdy nie istnieje w datatable.Sprawdź, czy istnieje wiersz w DataTable?
Jak mogę to zrobić?
Jeśli używasz zestawu danych wpisywanych, to znaczy zadeklarowany w czasie projektowania, "linq zawiera metodę" pobiera wpisaną DataRow. Domyślny IEqualityComparer porówna wszystkie wartości w DataRow. (Co jest normalnie bezużyteczne, ponieważ powinieneś mieć zdefiniowany klucz).
DataSet1 ds = new DataSet1();
DataSet1.DataTable1Row row = ds.DataTable1.AddDataTable1Row(bla, bla);
bool exists = ds.DataTable1.Contains(row);
Is [rozszerzenie] (http://stackoverflow.com/a/34438198/2404470) jest pomocny? – xameeramir
Cóż, "metoda LINQ zawiera", o której mowa powyżej, jest już rozszerzeniem metody. JEŚLI twoje rozszerzenie robiło coś pożytecznego, MOGA dodać trochę wartości do rozszerzenia zaimplementowanego przez MS. – S22
Dodałbym ... musisz zdefiniować klucz podstawowy w tabeli, nawet jeśli nie używasz wpisanego zestawu danych. –
Możesz użyć LINQ, aby sprawdzić, czy wiersz jest obecny w datatable. Zastosuj to rozwiązanie i zastąp "id" kluczem podstawowym wiersza, dzięki któremu możesz jednoznacznie zidentyfikować wiersz w tabeli.
DataRow dr = null; // assign your DR here
DataTable dt = new DataTable(); // assign Datatable instance here.
var k = (from r in dt.Rows.OfType<DataRow>() where r["id"].ToString() == dr["id"].ToString() select r).FirstOrDefault();
if(k != null)
{ // Row is present }
jeśli chcesz sprawdzić wszystkie cells
w DataRow
, można spróbować tej funkcji:
bool ContainDataRowInDataTable(DataTable T,DataRow R)
{
foreach (DataRow item in T.Rows)
{
if (Enumerable.SequenceEqual(item.ItemArray, R.ItemArray))
return true;
}
return false;
}
if (Datatable1.Rows[NumOfRow].ToString().Deleted == "Deleted")
Nie odpowiada na pytanie – Grantly
można użyć Contains
jak poniżej
if(DataTable.Columns.Contains("RowName"))
{
//Do some stuffs here
}
Należy sprawdzić istnienie wiersza przez porównywanie kluczy podstawowych:
static bool RowExists(DataTable table, DataRow row)
{
var pk = table.PrimaryKey
.Select(column => row[column, DataRowVersion.Original])
.ToArray();
return table.Rows.Contains(pk);
}
Czy masz klucz w rzędzie (jak ty powinien)? – TaW
Nie, nie mam, nie istnieje metoda taka jak "zawiera" lub "istnieje"? – Curious
@ TamerMemili Posiada [Zawiera] (http://msdn.microsoft.com/en-us/library/0hc992ac (v = vs.110) .aspx), ale to będzie działać tylko z tabelami, które mają PK. –