如何使用&& foreach循环中的运算符可以同时迭代2个集合

时间:2014-11-26 19:45:54

标签: c# wcf

我的wcf服务方法中有两个数据表。我想使用c#。

在列表中添加这些数据表的所有行

我正在使用foreach循环来添加数据表的所有行。我无法找到办法做这样的事情,

foreach (DataRow dr in dt.Rows && DataRow dr1 in dt1.Rows)
{       
    lst.Add(
           new GetData{week = dr["Week_Number"].ToString()
           , Total_Created = dr["Total_Created"].ToString()
           , Total_Open = **dr1**["Total_Open"].ToString()}
           );

}

3 个答案:

答案 0 :(得分:5)

我假设您的dr1行应该与dr的行对齐。

这根本不涉及&&运算符,而是使用LINQ方法将值组合在一起:

var data = dt.Rows.Cast<DataRow>()
      .Zip(dt1.Rows.Cast<DataRow>(),
          (dr, dr1) => new GetData{
               week = dr["Week_Number"].ToString()
               , Total_Created = dr["Total_Created"].ToString()
               , Total_Open = dr1["Total_Open"].ToString());
lst.AddRange(data);

答案 1 :(得分:4)

正如您可能发现的那样,您无法在C#中完成此操作。首先,我不清楚你想要发生什么,因为你的伪代码至少有三个明显的解释:

  1. 制作笛卡儿产品 - 根据drdr1的每种可能组合行事。要获得此效果,可以使用嵌套循环,例如:

    foreach (DataRow dr in dt.Rows)
    {
      foreach (DataRow dr1 in dt1.Rows)
      {
         // do stuff.
      }
    }
    
  2. 在顺序对上操作,例如第dt行第一行和dt1第一行。为此,您可以使用LINQ Zip功能组合元素对:

    dt.Rows.Cast<DataRow>().Zip(dt1.Rows.Cast<DataRow()),
     (dr, dr1) => 
     {
       // do stuff
     };
    
  3. 在匹配对上操作,例如有一个dt1行以某种方式与每个dt行相关联。为此,您需要循环遍历第一个表格并且#34;查找&#34;第二个匹配的行,使用任何有意义的标准:

    foreach (DataRow dr in dt.Rows)
    {
       DataRow dr1 = dt1.Select(someQueryHere)[0];
       // do stuff
    }
    

答案 2 :(得分:0)

使用LINQ进行Concat:

var dr1 = dt.Rows.Cast<DataRow>();
var dr2 = dt1.Rows.Cast<DataRow>();
var both = dr1.Concat(dr2);

foreach (DataRow dr in both)
{
}