我前段时间发布了similar query并决定降低其复杂性,让开发人员回答我的主要问题。它可以说是重复的,但我仍然希望将其发布为编辑上一篇文章并没有产生太多结果。
我有2个数据表:dataTable1和dataTable2。两者都有1行具有相同的条目。例如。两个数据表中的列都是Name,Class,Subject。现在两个dataTable的行都与值相同(“John”,“5”,“Science”)。现在我想比较这两行是否有相同的条目。我试过:
if(dataTable1.Rows[0].GetHashCode() == dataTable2.Rows[0].GetHashCode())
{
// Result is false (but I expected it to be true)
}
还尝试过:
if(dataTable1.Rows[0].ItemArray == dataTable2.Rows[0].ItemArray)
{
// Result is false (but I expected it to be true)
}
我想避免循环来做,但如果需要,那很好。我只想比较2行不同的数据表,如果他们的条目相同或不相同。我不知道该怎么办。感谢。
答案 0 :(得分:3)
答案 1 :(得分:2)
var result= dataTable1.AsEnumerable().Intersect(dataTable2.AsEnumerable(),
DataRowComparer.Default);
它返回表中的记录
更多信息:
答案 2 :(得分:1)
使用SequenceEqual来比较两个数据行,如以下示例所示
foreach (DataRow dr in datatable1.Rows)
foreach (DataRow dr2 in datatable2.Rows)
{
if (dr.ItemArray.SequenceEqual(dr2.ItemArray))
{
MessageBox.Show("dr = dr2");
//statement
}
else
{
MessageBox.Show("dr != dr2");
//statement
}
}
答案 3 :(得分:0)
为简单起见,我通常只会将ItemArray
中的项目转换为字符串,然后按照这种方式进行比较。
根据我的记忆,使用GetHashCode 不会显示出与其他人会说的相同的结果。
如果您有大量行,则可以尝试创建一个继承自DataRow
的类并覆盖Equals方法。例如:
class CustomRow : DataRow
{
public override bool Equals(object obj)
{
if(obj.GetType() != typeof(CustomRow)) return false;
for (int i = 0; i < ItemArray.Length; i++)
if (((CustomRow)obj)[i] != this[i])
return false;
return true;
}
}
public override bool Equals(object obj)
{
if(obj.GetType() != typeof(CustomRow)) return false;
for (int i = 0; i < ItemArray.Length; i++)
if (((CustomRow)obj)[i] != this[i])
return false;
return true;
}
}
答案 4 :(得分:0)
另一种选择是:
DataView dv = new DataView(dataTable1);
dv.Filter = "SQL query to find specific row"
这自然就是你要找到的每一个原始
答案 5 :(得分:0)
DataRowComparer自.NET 3.5开始可用,并非您可以找到使用它的示例。现在您可以:
df %>%
mutate(Result = ifelse(Date1 < Date2, "Yes", "No"))
#> # A tibble: 8 x 4
#> ID Date1 Date2 Result
#> <dbl> <date> <date> <chr>
#> 1 1 2019-09-10 2019-09-09 No
#> 2 1 2019-12-11 2019-12-01 No
#> 3 1 NA 2019-12-08 <NA>
#> 4 2 2019-09-11 2019-09-25 Yes
#> 5 2 2019-11-05 2019-11-15 Yes
#> 6 2 2019-12-05 NA <NA>
#> 7 3 2019-09-19 2019-09-11 No
#> 8 3 2019-10-22 2019-10-17 No
但是我喜欢这样做,并且喜欢DataRowComparer实例化-我需要看到性能上的优势。
HttpContext.Current.Request.Headers