两个数据集具有相同的字段结构,我需要将Dataset 1
在Dataset 2
.
- 要比较的两列是:
Dia
和Fecha
假设以下数据:
数据集 1:
数据集 2:
可以看出,数据集 1 包含星期四。在 01/04/2018 日期,在数据集 2 中找不到它,因此我只需将该值传递给
Dataset 2
.数据集2可能包含重复数据(如您所见,它每天包含两次
Lun. 01/01/2018
),但仅包含之前加载的数据。两个数据集都包含 7 行,但最终结果应该是数据集 2 在添加星期四后包含 8 行。
我是按以下方式完成的,它正在插入Jueves
但同时它正在复制所有其他数据:
for (int indice = 0; indice < dataset1.Tables[0].Rows.Count; indice++)
{
DateTime fecha_ds1 = Convert.ToDateTime(dataset1.Tables[0].Rows[indice]["Fecha"].ToString());
string fecha1 = fecha_ds1.ToString("yyyy/MM/dd");
string dia1 = dataset1.Tables[0].Rows[indice]["dia"].ToString();
for (int indice2 = 0; indice2 < dataset2.Tables[0].Rows.Count; indice2++)
{
DateTime fecha_ds2 = Convert.ToDateTime(dataset2.Tables[0].Rows[indice2]["Fecha"].ToString());
string fecha2 = fecha_ds2.ToString("yyyy/MM/dd");
string dia2 = dataset1.Tables[0].Rows[indic2]["dia"].ToString();
if (!fecha1.Equals(fecha2) && !dia1.Equals(dia2))
{
//Insertar la fila en Dataset 2
break; //y romper el ciclo para volver a tomar
//el siguiente valor del primer ciclo.
}
}
}
那么,我怎样才能有一个方法只返回不在 dataset2 中的行,然后插入它们呢?
注意:可能是返回带有这些缺失数据的新数据集/数据表。
编辑:
使用:Visual Studio 2010 和网络框架 4
您可以使用 LINQ 函数从第一个数据集中
Except
获取DataRow
第二个数据集中不存在的数据。唯一的事情是您必须定义一个实现接口的类,该接口
IEqualityComparer<T>
传递Except
它必须用来比较数据行的逻辑。您可以定义一个如下所示的类(如果您愿意,它可以是一个嵌套类,为了方便起见):
请注意,与您已有的相比,我通过以下两种方式简化了日期比较逻辑:
dia
,因为据我所知,如果日期匹配,那么日期也会匹配,所以检查这个附加字段对我来说似乎是多余的。Fecha
已经是 aDateTime
,但是您想比较这个日期而不考虑包含时间的部分,最简单的方法是使用Date
类的函数DateTime
,在表格中直接为您提供没有时间的日期。现在,定义了此类后,您可以使用以下 LINQ 表达式获得所需的结果:
版
如果
System.Data.DataSetExtensions
按照 Sergio 的建议添加对 的引用,那么代码可能会更“干净”一些:林克:
第 2 版
如果您想获取列表
DataRow
并将它们添加到您的第二个数据集,假设两个数据集具有相同的结构,您可以像这样简单地执行此操作:您需要添加对System.Data.DataSetExtensions的引用
然后你用linq 处理它到数据集