我有一个数据表和一行。我想仅在数据表中不存在行时将行导入数据表。
我该怎么做?
答案 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”)))