我有以下代码:
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
时,我的 UI 挂起。
最佳答案
不要使用 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
创建集合。否则你总是在评估它。
关于c# - 在 C# 中使用 LINQ 时函数求值超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19270106/