我在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次,几乎需要6-7秒才能完成for循环。为什么这么小的数据集要花这么多时间。
我应该用不同的方式写这篇文章吗?
发布于 2013-06-12 14:32:16
看看下面的代码是否运行得更快:
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-12 14:29:08
数据从何处进入这两个数据表。??如果它来自数据库,则尝试使用IQueryable、IEnumerable或IList。这样会更快,并且还可以将LazyLoading选项设置为False。首先将数据放入var、IQueryable、IEnumerable或IList中,然后应用以下查询进行连接:
IQueryable<string> testList = (from p in dbContext.test
join c in dbContext.test1 on p.testId equals c.test1Id
select c.test1);我希望它能对你有所帮助。:)
https://stackoverflow.com/questions/17058728
复制相似问题