Ho un datatable e una riga. Voglio importare la riga nel datatable solo se non esiste nel datatable.Controllare se esiste una riga in DataTable?
Come posso farlo?
Ho un datatable e una riga. Voglio importare la riga nel datatable solo se non esiste nel datatable.Controllare se esiste una riga in DataTable?
Come posso farlo?
Se si utilizza un DataSet tipizzato, cioè dichiarato in fase di progettazione, il "metodo linq Contains" prende un DataRow tipizzato. IEqualityComparer predefinito confronterà tutti i valori nella DataRow. (Che è normalmente inutile, dal momento che si dovrebbe avere una chiave definita).
DataSet1 ds = new DataSet1();
DataSet1.DataTable1Row row = ds.DataTable1.AddDataTable1Row(bla, bla);
bool exists = ds.DataTable1.Contains(row);
è [un'estensione] (http://stackoverflow.com/a/34438198/2404470) utile? – xameeramir
Bene, il "metodo LINQ contiene" di cui sopra è già un'estensione di metodo. SE la tua estensione stava facendo qualcosa di utile, POTREBBE aggiungere un certo valore all'estensione implementata da MS. – S22
Aggiungerei .. è necessario aver definito una chiave primaria sulla tabella anche se non si utilizza un set di dati tipizzato. –
È possibile utilizzare LINQ per verificare se la riga è presente in datatable. Segui questa soluzione e sostituisci "id" con la chiave primaria della tua riga, in cui puoi identificare in modo univoco una riga in una tabella.
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 }
se si desidera controllare tutti i cells
in un DataRow
, si può provare questa funzione:
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")
Non indirizza la domanda – Grantly
è possibile utilizzare Contains
come di seguito
if(DataTable.Columns.Contains("RowName"))
{
//Do some stuffs here
}
si dovrebbe verificare riga esistenza confrontando le chiavi primarie:
static bool RowExists(DataTable table, DataRow row)
{
var pk = table.PrimaryKey
.Select(column => row[column, DataRowVersion.Original])
.ToArray();
return table.Rows.Contains(pk);
}
Avete una chiave nella riga (come si dovrebbero)? – TaW
No non ce l'ho, non esiste un metodo come "contiene" o "esiste"? – Curious
@TamerMemili Ha [Contains] (http://msdn.microsoft.com/en-us/library/0hc992ac (v = vs.110) .aspx), ma funzionerà solo con le tabelle che contengono PK. –