我有以下代码:
var deletedData
= (from c in this.DataSet.Tables["TableName1"].AsEnumerable()
from deletedData1 in this.DataSet.Tables["TableName2"].AsEnumerable()
where (
(c.Field<string>("ColumnName1")
== deletedData1.Field<string>("ColumnName2"))
&& (c.Field<string>("ColumnName1") == someString))
select new
{
T1 = c.Field<string>("ColumnName3"),
T2 = deletedData1.Field<string>("ColumnName4"),
T3 = c.Field<string>("ColumnName5"),
T4 = deletedData1.Field<string>("ColumnName6")
});
执行此操作后,当我打开deletedData
的结果时,显示功能评估已超时。
任何人都可以帮助我摆脱这个吗?
Table1
有18000行,Table2
有400行。当我使用deletedData1
时,我的用户界面就悬空了。
答案 0 :(得分:2)
请勿使用Where
链接Linq-To-Object
中的表/集合,但Join
:
var deletedData = from c in this.DataSet.Tables["TableName1"].AsEnumerable()
let col1 = c.Field<string>("ColumnName1")
join deletedData1 in this.DataSet.Tables["TableName2"].AsEnumerable()
on col1 equals deletedData1.Field<string>("ColumnName2")
where col1 == someString
select new
{
T1 = c.Field<string>("ColumnName3"),
T2 = deletedData1.Field<string>("ColumnName4"),
T3 = c.Field<string>("ColumnName5"),
T4 = deletedData1.Field<string>("ColumnName6")
};
<强> Why is LINQ JOIN so much faster than linking with WHERE? 强>
但是,由于这只是一个查询,你应该以某种方式实现它。因此,您可以在foreach
中使用它,或使用ToList
创建一个集合。否则你总是在评估它。