我的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()}
);
}
答案 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#中完成此操作。首先,我不清楚你想要发生什么,因为你的伪代码至少有三个明显的解释:
制作笛卡儿产品 - 根据dr
和dr1
的每种可能组合行事。要获得此效果,可以使用嵌套循环,例如:
foreach (DataRow dr in dt.Rows)
{
foreach (DataRow dr1 in dt1.Rows)
{
// do stuff.
}
}
在顺序对上操作,例如第dt
行第一行和dt1
第一行。为此,您可以使用LINQ Zip
功能组合元素对:
dt.Rows.Cast<DataRow>().Zip(dt1.Rows.Cast<DataRow()),
(dr, dr1) =>
{
// do stuff
};
在匹配对上操作,例如有一个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)
{
}