【问题标题】:Update first Datatable depends on second Datatable with multiple key Condition更新第一个数据表取决于具有多个键条件的第二个数据表
【发布时间】:2023-03-17 23:37:01
【问题描述】:

我有一种情况要更新 TABLEA 依赖于 TABLEB 但 comaparision 键不止一个。单比较键没问题

任何人都可以对此提出一些建议吗?

这里我使用了下面的代码。

                        _dtMaster.AsEnumerable().Join(_dtChild.AsEnumerable(),
                         _dtmater => Convert.ToString(_dtmater[ss.TrimStart().TrimEnd()]),
                         _dtchild => Convert.ToString(_dtchild[ss.TrimStart().TrimEnd()]),
                         (_dtmater, _dtchild) => new { _dtmater, _dtchild }).ToList().ForEach(o =>
                         {
                             for (int i = 0; i <= Field.Count() - 1; i++) //Set value to table
                                 o._dtmater.SetField(Field[i], o._dtchild[Field[i]].ToString());
                         });

我想从 _dtchild 表更新数据的数据表中的 _dtmaster 位置 此示例是单键比较。我怎样才能为多个键做这个?

谢谢

【问题讨论】:

    标签: c#-4.0 datatable dataset


    【解决方案1】:

    您可以使用匿名类型来Join

    var joined = from m in _dtMaster.AsEnumerable()
                 join c in _dtChild.AsEnumerable()
                     on new { Col1 = m.Field<string>("Col1"), Col2 = m.Field<string>("Col2") }
                 equals new { Col1 = c.Field<string>("Col1"), Col2 = c.Field<string>("Col2") }
                 select new { MasterRow = m, ChildRow = c };
    
    foreach (var both in joined)
    { 
        foreach (DataColumn mCol in both.MasterRow.Table.Columns)
        {
            both.MasterRow.SetField(mCol, both.ChildRow[mCol.Ordinal]);
        }
    }
    

    【讨论】:

    • 天哪,你这样做了。感谢你的回复。您能否告诉我如何在此代码中适合我的动态列列表。表示如果我不知道要比较多少个键会发生什么。
    • @RamdasBhosale:也许您应该针对此问题发布另一个问题。为什么您在编译时不知道列?看看ExpandoObject
    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多