如何比较两个数据表并更新数据表中不匹配的行,该数据表给出结果数据表
本文关键字:数据表 结果 不匹配 比较 何比较 两个 更新 | 更新日期: 2023-09-27 18:06:43
MasterData
Id nbsp;名称
1 nbsp;中心
2 nbsp;东部
3 nbsp;中东部
4 nbsp;东海岸
5 nbsp;北方
6 nbsp;西北
7 nbsp;南
8 nbsp;中南部
9 nbsp;西部
接收的数据
Id nbsp;名称 nbsp;价值
1 nbsp;CENTRAL nbsp;125.65
5 nbsp;NORTH nbsp;553.21
我希望结果如下
Id nbsp;名称 nbsp nbsp nbsp nbsp;价值
1 nbsp;CENTRAL nbsp nbsp nbsp nbsp;125.65
2 nbsp;EAST nbsp nbsp nbsp nbsp nbsp 0
3 nbsp;中东 nbsp nbsp nbsp nbsp;0
4 nbsp;东海岸 nbsp nbsp 0
5 nbsp;NORTH nbsp nbsp 553.21
6 nbsp;西北 nbsp nbsp 0
7 nbsp;南方 nbsp nbsp 0
8 nbsp;中南部 nbsp nbsp 0
9 nbsp;WEST nbsp nbsp 0
请注意,所有这些都是数据表,我如何才能获得结果
假设您的DataTable
声明如下:
var dt1 = new DataTable();
dt1.Columns.Add(new DataColumn("Id", typeof(int)));
dt1.Columns.Add(new DataColumn("Name", typeof(string)));
var dt2 = new DataTable();
dt2.Columns.Add(new DataColumn("Id", typeof(int)));
dt2.Columns.Add(new DataColumn("Name", typeof(string)));
dt2.Columns.Add(new DataColumn("Value", typeof(double)));
您可以加入它,并使用LINQ对象获得您想要的东西:
var query = from r1 in dt1.AsEnumerable()
join r2 in dt2.AsEnumerable() on r1.Field<int>("Id") equals r2.Field<int>("Id") into r3
from r4 in r3.DefaultIfEmpty()
select new
{
Id = r1.Field<int>("Id"),
Name = r1.Field<string>("Name"),
Value = r4 == null ? 0.00 : r4.Field<double>("Value")
};
使用IEnumerable<Anonymous_Type>
,您可以使用ToDataTable<T>
扩展方法取回DataTable
对象
public static class EnumerableToDataTableConverter
{
public static DataTable ToDataTable<T>(this IEnumerable<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var newRow = dataTable.NewRow();
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
newRow[Props[i].Name] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(newRow);
}
//put a breakpoint here and check datatable
return dataTable;
}
}
您可以通过以下语句从query
获得DataTable
:
var result = query.ToDataTable();