Ich habe eine Datentabelle und eine Zeile. Ich möchte die Zeile nur in die Datentabelle importieren, wenn sie nicht in der Datentabelle vorhanden ist.Prüfen, ob in DataTable eine Zeile existiert?
Wie kann ich das tun?
Ich habe eine Datentabelle und eine Zeile. Ich möchte die Zeile nur in die Datentabelle importieren, wenn sie nicht in der Datentabelle vorhanden ist.Prüfen, ob in DataTable eine Zeile existiert?
Wie kann ich das tun?
Wenn Sie eine typisierte Datasets verwenden, das heißt In der Entwurfszeit deklariert, dauert die Methode "linq Contains" eine typisierte DataRow. Der Standard IEqualityComparer vergleicht alle Werte in der DataRow. (Was normalerweise nutzlos ist, da Sie einen Schlüssel definiert haben sollten).
DataSet1 ds = new DataSet1();
DataSet1.DataTable1Row row = ds.DataTable1.AddDataTable1Row(bla, bla);
bool exists = ds.DataTable1.Contains(row);
Ist [eine Erweiterung] (http://stackoverflow.com/a/34438198/2404470) hilfreich? – xameeramir
Nun, die oben erwähnte Methode "LINQ contains" ist bereits eine Methodenerweiterung. WENN Ihre Erweiterung etwas Nützliches getan hätte, hätte sie der von MS implementierten Erweiterung einen gewissen Wert hinzugefügt. – S22
Ich würde hinzufügen .. Sie müssen einen Primärschlüssel in der Tabelle definiert haben, auch wenn Sie kein typisiertes Dataset verwenden. –
Sie können LINQ verwenden, um zu überprüfen, ob eine Zeile in der Datentabelle vorhanden ist. Folgen Sie dieser Lösung und ersetzen Sie "id" durch den Primärschlüssel Ihrer Zeile, mit dem Sie eine Zeile in einer Tabelle eindeutig identifizieren können.
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 }
, wenn Sie wollen, dass alle zu überprüfen, die cells
in einem DataRow
, können Sie diese Funktion versuchen:
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")
Geht nicht auf die Frage ein – Grantly
können Sie Contains
verwenden als unten
if(DataTable.Columns.Contains("RowName"))
{
//Do some stuffs here
}
Sie sollten Zeile Existenz durch den Vergleich Primärschlüssel überprüfen:
static bool RowExists(DataTable table, DataRow row)
{
var pk = table.PrimaryKey
.Select(column => row[column, DataRowVersion.Original])
.ToArray();
return table.Rows.Contains(pk);
}
Haben Sie einen Schlüssel in der Reihe haben (wie Sie sollte)? – TaW
Nein, ich habe keine, gibt es nicht eine Methode wie "enthält" oder "existiert"? – Curious
@TamerMemili Es hat [Enthält] (http://msdn.microsoft.com/en-us/library/0hc992ac (v = vs.110) .aspx), aber das funktioniert nur mit Tabellen, die PK haben. –