请教一下linq联合查询的问题,我这里用两个DataTable进行联合查询,速度特别慢。

TLJewel 2012-05-17 04:49:00
不知道是什么原因,速度非常慢。功能是查出两个表之间相同数量的数据。联合条件是Warehouse,storage和MaterialCode相等。qty和wayqty其中有一个符合就行。



static void Main(string[] args)
{
DataTable dt1 = GetTable();
DataTable dt2 = GetTable();

int listCount = 10000;
Random random = new Random();
for (int i = 1; i <= listCount; i++)
{
DataRow row = dt1.NewRow();
row["Warehouse"] = "100" + random.Next(2).ToString();
row["storage"] = "100" + random.Next(3).ToString();
row["MaterialCode"] = i.ToString();
row["Qty"] = random.Next(10);
row["WayQty"] = 10;
//row["WayQty"] = random.Next(1);
dt1.Rows.Add(row);
}

Random random1 = new Random();
for (int i = 1; i <= listCount; i++)
{
DataRow row = dt2.NewRow();
row["Warehouse"] = "100" + random1.Next(2).ToString();
row["storage"] = "100" + random1.Next(3).ToString();
row["MaterialCode"] = i.ToString();
row["Qty"] = random1.Next(10);
row["WayQty"] = 10;
//row["WayQty"] = random1.Next(1);
dt2.Rows.Add(row);
}

//Linq的测试方式
Stopwatch linq_Stopwatch = new Stopwatch();
linq_Stopwatch.Start();

var linqList = from a in dt1.AsEnumerable()
join s in dt2.AsEnumerable() on a.Field<string>("Warehouse") equals s.Field<string>("Warehouse")
where a.Field<string>("storage").Equals(s.Field<string>("storage"))
&& a.Field<string>("MaterialCode").Equals(s.Field<string>("MaterialCode"))
&& (
a.Field<int>("Qty") == s.Field<int>("Qty")
|| a.Field<int>("WayQty") == s.Field<int>("WayQty")
)
select a;
int count = linqList.Count();
linq_Stopwatch.Stop();
}


static DataTable GetTable()
{
DataTable dt = new DataTable();
DataColumn col1 = new DataColumn("Warehouse", typeof(string));
DataColumn col2 = new DataColumn("storage", typeof(string));
DataColumn col3 = new DataColumn("MaterialCode", typeof(string));
DataColumn col4 = new DataColumn("Qty", typeof(int));
DataColumn col5 = new DataColumn("WayQty", typeof(int));
dt.Columns.Add(col1);
dt.Columns.Add(col2);
dt.Columns.Add(col3);
dt.Columns.Add(col4);
dt.Columns.Add(col5);
return dt;
}
...全文
235 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
TLJewel 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

引用楼主 的回复:
不知道是什么原因,速度非常慢。功能是查出两个表之间相同数量的数据。联合条件是Warehouse,storage和MaterialCode相等。qty和wayqty其中有一个符合就行。

C# code


static void Main(string[] args)
{
DataTable dt1 = GetTable();
Data……

试了一下……
[/Quote]

我是想查出两个表之间其中有一个或全部相同的数据。是不是该用New。
反正效率很低就是了,但是用List就不会有这个问题。
你的选择B 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
不知道是什么原因,速度非常慢。功能是查出两个表之间相同数量的数据。联合条件是Warehouse,storage和MaterialCode相等。qty和wayqty其中有一个符合就行。

C# code


static void Main(string[] args)
{
DataTable dt1 = GetTable();
Data……
[/Quote]
试了一下,确实很慢,不过不明白楼主这样测试有什么意思
join之后select的依然是a啊

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧