主数据
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 object 获得您想要的内容:
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/