CodeGo.net>使用LINQ的DataTable表达式列

时间:2018-11-27 10:05:47

标签: c# linq expression

仅当第二个数据表中的列不存在并且第二个数据表的表达式列需要使用linq从第一个数据表列设置值时,才需要将一个数据表中的列添加到另一个数据表中。

我已经使用foreach实现了这一点,但是如何在linq中不使用foreach呢?

        DataTable first = new DataTable();
        first.Clear();
        first.Columns.Add("Name");
        first.Columns.Add("Exp");
        DataRow _ra = dt1.NewRow();
        _ra["Name"] = "Column_1";
        _ra["Exp"] = "ExpTarget * Column_3";
        first.Rows.Add(_ra);
        DataRow _r = dt1.NewRow();
        _r["Name"] = "Column_2";
        _r["Exp"] = "ExpTarget * Column_3";
        first.Rows.Add(_r);
        DataRow _r2 = dt1.NewRow();
        _r2["Name"] = "Column_3";
        _r2["Exp"] = "ExpTarget";
        first.Rows.Add(_r2);


        DataTable second = new DataTable();
        second.Clear();
        second.Columns.Add("Column_3",typeof(System.Int16));
        second.Columns.Add("ExpTarget",typeof(System.Int16));
        DataRow _r21 = table.NewRow();
        _r21["Column_3"] = 100;
        _r21["ExpTarget"] = 2;
        second.Rows.Add(_r21);

下面添加列和表达式的代码,我需要避免在下面为表达式列使用 foreach linq,如何在没有foreach的情况下做到这一点?

   // get all columns from first datatable
   string[] col = string.Join(",", first.AsEnumerable().Select(x => x["Name"].ToString()).ToArray()).Split(',').ToArray();

   // get all columns and expression from first datatable
   List<string> exp = string.Join(",", first.AsEnumerable().Select(x => x["Name"].ToString() + "~" + x["Exp"].ToString()).ToArray()).Split(',').ToList();

   List<string[]> list = new List<string[]>();
   list.Add(col);

   second.Columns.AddRange(list.First().Select(r => second.Columns.Contains(r) ? second.Columns["Dummy"] : new DataColumn(r, typeof(System.Decimal))).ToArray());

   exp.ForEach(r =>  
   {
       second.Columns[r.ToString().Split('~')[0].ToString()].Expression = r.ToString().Split('~')[1].ToString();

    });

0 个答案:

没有答案