簡體   English   中英

檢查數據表中是否存在行?

[英]Check if row exists in DataTable?

我有一個數據表和一行。 只有當數據表中不存在該行時,我才想將該行導入到數據表中。

我怎樣才能做到這一點?

如果您使用類型化DataSet ,即在設計時聲明,“linq Contains 方法”采用類型化DataRow 默認的IEqualityComparer將比較DataRow所有值。 (這通常是無用的,因為您應該定義一個鍵)。

DataSet1 ds = new DataSet1();
DataSet1.DataTable1Row row = ds.DataTable1.AddDataTable1Row(bla, bla);
bool exists = ds.DataTable1.Contains(row);

您可以使用 LINQ 檢查數據表中是否存在行。 遵循此解決方案,並將“id”替換為您行的主鍵,您可以通過它來唯一標識表中的行。

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 }

如果要檢查DataRow所有cells ,可以嘗試以下功能:

bool ContainDataRowInDataTable(DataTable T,DataRow R)
{
    foreach (DataRow item in T.Rows)
    {
        if (Enumerable.SequenceEqual(item.ItemArray, R.ItemArray))
            return true;
    }
    return false;
}

您可以使用Contains如下

if(DataTable.Columns.Contains("RowName"))
{
  //Do some stuffs here
}

在這里嘗試了所有答案但沒有用,所以我為自己做了一些適合我的情況。 代碼非常簡單,它檢查您要添加的行是否已經存在於數據表中——如果它不存在於數據表中,則添加它。

// fill dt with information
DataTable dt = new DataTable();

// create a new row and fill it with information
DataRow dr = dt.NewRow();

// distinct
bool isDistinct = true;
for (int i=0; i < dt.Rows.Count; i++)
{
  // check if both rows are equal
  if (Enumerable.SequenceEqual(dt.Rows[i].ItemArray, dr.ItemArray))
  {
    // it already exists
    isDistinct = false;
    break;
  }
}

if (isDistinct)
{
  dt.Rows.Add(dr);
}
if ( Datatable1.Rows[NumOfRow].ToString().Deleted == "Deleted")

您應該通過比較主鍵來檢查行是否存在:

static bool RowExists(DataTable table, DataRow row)
{
    var pk = table.PrimaryKey
                .Select(column => row[column, DataRowVersion.Original])
                .ToArray();

    return table.Rows.Contains(pk);
}

原因是,您嘗試對照現有DataTable檢查的DataRow在現實生活中與表中的DataRaw相比是不同的類實例,即使DataTable已經存在相同的DataRaw也是如此。 在這種情況下,通常的 .NET 相等比較無法正常工作。 這包括DataTable.Contains(...)方法。

要正確檢查DataRaw存在於表,定的主鍵DataRaw應搜索在表中。

您可以檢查使用 any 與鍵值

If (value.Tables(0).AsEnumerable().Any(Function(x) key = x.Field(Of Integer)("ProductId")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM