检查DataTable中是否存在行?

时间:2014-09-28 18:18:56

标签: c# datatable datarow

我有一个数据表和一行。我想仅在数据表中不存在行时将行导入数据表。

我该怎么做?

8 个答案:

答案 0 :(得分:10)

如果您使用键入的DataSet,即I.e。在设计时宣布," linq包含方法"采用键入的DataRow。默认IEqualityComparer将比较DataRow中的所有值。 (这通常是无用的,因为你应该定义一个键。)

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

答案 1 :(得分:7)

如果您要查看cells中的所有DataRow,可以尝试此功能:

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

答案 2 :(得分:6)

您可以使用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 }

答案 3 :(得分:3)

您可以使用Contains,如下所示

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

答案 4 :(得分:2)

在这里尝试了所有答案,但是没有用,所以我为自己做了一些在我的情况下可行的事情。该代码非常简单,它检查要添加的行在数据表中是否已经存在-如果数据表中不存在该行,则将其添加。

// 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);
}

答案 5 :(得分:0)

if ( Datatable1.Rows[NumOfRow].ToString().Deleted == "Deleted")

答案 6 :(得分:0)

您应该通过比较主键来检查行的存在:

fillData

原因是,在现实场景中,您尝试检查现有static bool RowExists(DataTable table, DataRow row) { var pk = table.PrimaryKey .Select(column => row[column, DataRowVersion.Original]) .ToArray(); return table.Rows.Contains(pk); } 的{​​{1}}与表中的DataRow相比是不同的类实例,即使相同DataTable中已存在DataRaw。在这种情况下,通常的.NET相等比较无法正常工作。这包括DataRaw方法。

要正确检查表格中是否存在DataTable,应在表格中搜索给定DataTable.Contains(...)的主键。

答案 7 :(得分:0)

您可以使用任何带有键值的

如果(value.Tables(0).AsEnumerable()。Any(Function(x)key = x.Field(Of Integer)(“ ProductId”)))