Linq对象多语句vs.单语句

本文关键字:语句 单语句 vs 对象 Linq | 更新日期: 2023-09-27 18:02:42

在Linq to objects中,这段代码的执行有什么不同吗?

var changedFileIDs = updatedFiles.Where(file => file.CurrentVersion != file.OriginalVersion).Select(file => file.ID);
var changedVaultFiles = filesToUpdate.Where(x => changedFileIDs.Contains(x.ID));
foreach (var file in changedVaultFiles)
{
    Vault.Upload(file);
}

和这个代码?

var changedVaultFiles = filesToUpdate.Where(x => updatedFiles.Where(file => file.CurrentVersion != file.OriginalVersion).Select(file => file.ID).Contains(x.ID));
foreach (var file in changedVaultFiles)
{
    Vault.Upload(file);
}

Linq对象多语句vs.单语句

不,性能上没有区别,因为Linq的特性之一是延迟执行,换句话说,直到查询变量在foreachfor中迭代,或者调用ToListToArray扩展方法,您的查询才会执行。所以在你的第一个例子中,你正在编写你的主查询,但直到你遍历它才会执行。

你会在这个链接中找到更多关于查询在LINQ中如何执行的细节。

延迟执行摘要:

用户创建LINQ查询后,将其转换为命令树。命令树是查询的表示形式。命令树然后在查询变量为时对数据源执行迭代,而不是在创建查询变量时。在查询执行时,所有查询表达式(即中使用的那些表达式结果实体化。