1

我在 LINQ 中对两个表执行连接操作,但对于小型数据集执行大部分时间。以下是 LINQ 查询

 for (int i = 0; i <= 200; i++)
 {
      var test = from r1 in dtRowForNode.AsEnumerable()
                 join r2 in dtFileRowForNode.AsEnumerable()
                 on r1.Field<int>("Lng_Upload_Id") equals r2.Field<int>("Lng_Upload_Id")
                 where ((r1.Field<string>("Txt_Called_Number") == "999") || r1.Field<string>("Txt_Calling_Number") == "888")
                 select r2.Field<string>("Txt_File_Name");

       string[] str = test.Distinct().ToArray();                
}

在这里,我有两个dtRowForNode大约有 7500 行的数据表,另一个dtFileRowForNode只有 12 行。

现在我要循环这个查询 200 次,完成 for 循环大约需要 6-7 秒。为什么这么小的数据集要花这么多时间。

我应该用不同的方式写这个吗?

4

2 回答 2

1

看看以下是否对您来说运行得更快:

var rowForNode=dtRowForNode.AsEnumerable().Select(dt=>new {
  Lng_Upload_Id=dt.Field<int>("Lng_Upload_Id"),
  Txt_Called_Number=dt.Field<string>("Txt_Called_Number"),
  Txt_Calling_Number=dt.Field<string>("Txt_Calling_Number")}).ToList();

var fileRowForNode=dtFileRowForNode.AsEnumberable().Select(dt=>new {
  Lng_Upload_Id=dt.Field<int>("Lng_Upload_Id"),
  Txt_File_Name=dt.Field<string>("Txt_File_Name")}).ToList();

 for (int i = 0; i <= 200; i++)
 {
      var test = from r1 in rowForNode
                 join r2 in fileRowForNode
                 on r1.Lng_Upload_Id equals r2.Lng_Upload_Id
                 where (r1.Txt_Called_Number == "999"
                    || r1.Txt_Calling_Number == "888")
                 select r2.Txt_File_Name;

       string[] str = test.Distinct().ToArray();                
}
于 2013-06-12T06:32:15.617 回答
0

数据从哪里进入这两个数据表。?? 如果它来自数据库,则尝试使用 IQueryable 或 IEnumerable 或 IList。这些会更快,并将 LazyLoading 选项设置为 False。首先将数据放入 var 或 IQueryable 或 IEnumerable 或 IList 中,然后将以下查询应用于 join :

IQueryable<string> testList = (from p in dbContext.test
                             join c in dbContext.test1 on p.testId equals c.test1Id
                             select c.test1);

我希望它会帮助你。:)

于 2013-06-12T06:29:08.323 回答