我在SQL Server中有3个大表:
第一个表是" main" table,第二个表有第一个的外键(ID1),第三个表的外键也是第一个(ID2)。
我在程序中将它们加载到三个DataTable中,并且需要对这三个表进行左连接。
我已经用linq这样做了:
var defaultRow = table2.NewRow();
for (int i = 0; i < table2.Columns.Count; i++)
{
defaultRow[i] = DBNull.Value;
}
var leftJoin1 = from t1 in table1.AsEnumerable()
join t2 in table2.AsEnumerable() on t1["ID1"] equals t2["ID1"]
into tableGroup
from item in tableGroup.DefaultIfEmpty<DataRow>(defaultRow)
select new
{
ID1 = t1["ID1"],
Column12 = t1["Column12 "],
Column13 = t1["Column2"],
... Column118 = t1["Column118"],
Column21 = item["Column21"],
Column22 = item["Column22"],
...
Column29 = item["Column29"]
};
foreach (var row in leftJoin1)
{
var newRow = table1Table2.NewRow();
newRow.ItemArray = new object[] { row.ID1, row.Column12, row.Column13, ..., row.Column118, row.Column21, row.Column22, ..., row.Column29 };
table1Table2.Rows.Add(newRow);
}
这对我有用 - 首先我在table1和table 2上保持连接,然后以相同的方式连接到连接表(table1table2)和table3,并加入table1table2table3。
我的问题是表现。当我这样做加入如此大的数据表时,它会持续很长时间。前两个数据表不是问题,但加入第三个有时永远不会结束,除非我为它们设置了一些过滤器 - 在这种情况下,连接完成几分钟。
我搜索了很长时间怎么做而不是设置过滤器(减少行数)并且找不到答案。
我有什么方法可以在C#中快速加入这三个大型数据表吗?
谢谢。