首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在dataTable中比较两个DataTable并更新不匹配的行,从而得到resultDataTable?

如何在dataTable中比较两个DataTable并更新不匹配的行,从而得到resultDataTable?
EN

Stack Overflow用户
提问于 2013-04-01 18:37:05
回答 1查看 2.4K关注 0票数 2

MasterData

Id :姓名

中部时间1:00

东部地区2%

东区中部3号

4.东部沿海地区

5.北上

西北地区6个月

7月份,中国南部

8点,位于中南部

9点到西部

接收的数据

Id :其名称和价值

1%,中央银行,125.65

5%的中国北方地区: 553.21。

我希望结果如下所示

Id **名称*值

1* 125.65 *

*

3%,东部中部地区,3%,3%,40.0%。

4%;东部沿海地区;30.0%;

5%的中国北方地区: 553.21 %的人。

6%的西北部地区,70.0%的地区。

7%的韩国人,7%的人和0.0的人

8%,中南地区:8%,10%。

9:00,西部:10:00,10:00

请注意,所有数据都是数据表,如何获取结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-01 19:01:34

假设您的DataTable声明如下:

代码语言:javascript
复制
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加入它并获得您想要的内容:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
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

代码语言:javascript
复制
var result = query.ToDataTable();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15741843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档