您能否建議如何爲以下操作編寫優化LINQ查詢?使用LINQ優化嵌套循環
foreach (DataRow entry1 in table1.Rows)
{
var columnA = entry1["ColumnA"] as string;
if (!string.IsNullOrEmpty(columnA))
{
foreach (string entry2 in table2)
{
var dataExists = table3.Any(rows3 =>
!string.IsNullOrEmpty(rows3[entry2] as string)
&& columnA.IsEqual(rows3["ColumnB"] as string));
if (dataExists)
{
entry1[entry2] = Compute(columnA, entry2);
}
}
}
}
我試過這個,但結果在獨特的迭代計數方面不匹配。
var t2t3Pair = from entry2 in table2
let entry3 = table3.FirstOrDefault(x =>
!string.IsNullOrEmpty(x[entry2] as string))
where entry3 != null
select new { entry2, entry3 };
var t1t3Pair = from pair in t2t3Pair
from entry1 in table1.AsEnumerable()
let columnA = entry1["ColumnA"] as string
where !string.IsNullOrEmpty(columnA)
&& columnA.IsEqual(pair.entry3["ColumnB"] as string)
select new { Entry1Alias = entry1, Entry2Alias = pair.entry2 };
foreach (var pair in t1t3Pair)
{
var columnA = (string)pair.Entry1Alias["ColumnA"];
pair.Entry1Alias[pair.Entry2Alias] = Compute(columnA, pair.Entry2Alias);
}
注:IsEqual
是我的擴展方法不區分大小寫比較字符串。
什麼是你想優化?可讀性還是性能?我認爲這兩者都不會改善。 – Maarten
表現。我無法給出確切的代碼。我知道這可能很難閱讀,但您可以重新命名變量以適合自己。 – Nayan
您爲什麼期望手動內存處理是linq內存中處理的任何不同的執行方式? – Maarten