linq 查询是否可以更改其数据源,即字典的内容

本文关键字:字典 数据源 是否 查询 linq | 更新日期: 2023-09-27 18:34:54

在我看来,Linq 只能查询给定的数据源,也就是说,它会浏览它并根据需要从中返回内容,但不更改任何内容。然而,我在这个问题上找到的一些答案中的措辞使我怀疑这种理解。我的理解在所有情况下都是正确的吗?linq 查询是否可以更改与其关联的数据源的内容?

linq 查询是否可以更改其数据源,即字典的内容

linq 查询是否可以更改与其关联的数据源的内容?

是的,尽管这是一个坏主意。

LINQ

查询(至少使用 LINQ to Objects(通过使用筛选器或映射操作的委托来工作。 一般来说,这些不应该引起副作用,但这并不意味着如果你强迫他们这样做,他们就不能这样做。 实际的 LINQ 方法不会更改数据,但它们通过您提供的代码的委托工作,这意味着代码可以执行任何操作。

请注意,这通常是一个坏主意。

例如,假设您正在对Person实例的集合执行查询:

var results = people.Where(p => p.Name == "Foo")
                    .Select(p =>
                            {
                               // This is evil, don't do it!
                               p.Name = "Bar";
                               return p;
                            });

话虽如此,这不太可能与 LINQ 一起对抗IQueryable<T>。 在这种情况下,您提供的lambda将被转换为Expression,而提供程序又需要将其转换为其他形式(即:实体框架将其转换为SQL(。 因此,只有当提供程序的编写方式可以转换为有意义的形式时,您才能产生副作用,而这种情况不太可能发生。