在 C# 中使用 LINQ 时,函数计算超时
本文关键字:函数 计算 超时 LINQ | 更新日期: 2023-09-27 18:34:29
我有以下代码:
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")
};
为什么 LINQ JOIN 比与 WHERE 链接快得多?
但是,由于这只是一个查询,因此您应该以某种方式实现它。因此,您可以在foreach
中使用它或使用ToList
创建集合。否则,您总是在评估它。