在C#中左连接大数据表

时间:2018-01-10 13:38:56

标签: c# asp.net linq join datatables

我在SQL Server中有3个大表:

  • 表1(ID1,...,ID2)=>大约300万行
  • 表2(...,ID1,...)=>大约50000行
  • 表3(...,ID2,...)=>大约800万行

第一个表是" 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#中快速加入这三个大型数据表吗?

谢谢。

0 个答案:

没有答案