gpt4 book ai didi

c# - 如何比较两个数据表并更新数据表中的不匹配行,从而给出结果数据表?

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:18 26 4
gpt4 key购买 nike

主数据

ID 姓名
1 中央
2 东
3 中东部
4 东海岸
5 北
6 西北

7 南

8 中南部

9 西

收到数据

ID 名称 值
1 中央 125.65
5 北 553.21

我希望结果如下

ID 名称 值
1 中央 125.65
2 东 0.0
3 中东部 0.0
4 东海岸 0.0
5 北 553.21
6 西北 0.0
7 南 0.0
8 中南部 0.0
9 西 0.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 to objects 获得您想要的东西:

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>你可以获得DataTable返回对象,使用 ToDataTable<T>扩展方法:

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

可以得到DataTable来自 query声明如下:

var result = query.ToDataTable();

关于c# - 如何比较两个数据表并更新数据表中的不匹配行,从而给出结果数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15741843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com