首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于LINQ的高效连接查询

基于LINQ的高效连接查询
EN

Stack Overflow用户
提问于 2013-06-12 14:11:32
回答 2查看 706关注 0票数 1

我在LINQ中对两个表执行连接操作,但对于小的数据集,执行连接操作花费的时间最多。以下是LINQ查询

代码语言:javascript
复制
 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次,几乎需要6-7秒才能完成for循环。为什么这么小的数据集要花这么多时间。

我应该用不同的方式写这篇文章吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-12 14:32:16

看看下面的代码是否运行得更快:

代码语言:javascript
复制
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();                
}
票数 1
EN

Stack Overflow用户

发布于 2013-06-12 14:29:08

数据从何处进入这两个数据表。??如果它来自数据库,则尝试使用IQueryable、IEnumerable或IList。这样会更快,并且还可以将LazyLoading选项设置为False。首先将数据放入var、IQueryable、IEnumerable或IList中,然后应用以下查询进行连接:

代码语言:javascript
复制
IQueryable<string> testList = (from p in dbContext.test
                             join c in dbContext.test1 on p.testId equals c.test1Id
                             select c.test1);

我希望它能对你有所帮助。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17058728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档