在 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 挂起了。

在 C# 中使用 LINQ 时,函数计算超时

不要使用 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创建集合。否则,您总是在评估它。