我有两个这样的数据表:
DT1:
ID1
----------
1
2
3
4
5
6
7
8
9
10
DT2:
ID2
----------
1
2
3
4
5
现在,我想从这两个数据表中检索所有项目的组合,结果将包含50(10 x 5)行 - 如下所示:
dtResult:
ID1 ID2
------------
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
3 1
. .
. .
. .
有没有简单的方法而不是使用循环?
答案 0 :(得分:5)
您正在寻找笛卡尔积。使用CROSS JOIN
Select a.ID1, b.ID2
FROM dt1 A CROSS JOIN dt2 B
答案 1 :(得分:4)
完整加入:
Select a.ID1, b.ID2 FROM dt1 A,dt2 B
答案 2 :(得分:2)
LINQ:
var combinedRows = from a in dt1.AsEnumerable()
from b in dt2.AsEnumerable()
select new { ColumnID1 = a["ID1"], ColumnID2 = b["ID2"] };
foreach (var item in combinedRows)
{
row = dt3.NewRow();
row["ID1"] = item.ColumnID1;
row["ID2"] = item.ColumnID2;
dt3.Rows.Add(row);
}
答案 3 :(得分:1)
使用
DataTable dt1 = new DataTable();
dt1.Columns.AddRange(new DataColumn[] {
new DataColumn("ID1") });
for (int i = 0; i < 10; i++)
dt1.Rows.Add(i + 1);
DataTable dt2 = new DataTable();
dt2.Columns.AddRange(new DataColumn[] {
new DataColumn("ID2") });
for (int i = 0; i < 5; i++)
dt2.Rows.Add(i + 1);
var queryOne = from row in dt1.AsEnumerable()
from row1 in dt2.AsEnumerable()
select new
{
id1 = row.Field<string>("ID1"),
id2 = row1.Field<string>("ID2")
};
var result = queryOne.ToList();
答案 4 :(得分:0)
非常感谢,但我已经通过LINQ中的Foreach方法解决了这个问题。