Foreach 更改未保留在 Linq 项目集合上

发布于 2024-12-09 11:53:34 字数 285 浏览 0 评论 0原文

在下面的示例中,当我返回集合时,不会保留在 foreach 中应用的更改:

var people = SomeLinqToSqlSource();

foreach (var person in people)
{
   person.Name = "Jimmy";
}

return people.AsQueryable();

这与我的理解相矛盾,即在 foreach(..) 中,您通过引用对当前项进行操作。

有人可以让我知道我哪里出错了吗?

谢谢。

In the following example, changes applied in the foreach are not preserved when I return the collection:

var people = SomeLinqToSqlSource();

foreach (var person in people)
{
   person.Name = "Jimmy";
}

return people.AsQueryable();

This contradicts my understanding that within a foreach(..), you operate by-reference on the current item.

Could anybody please let me know where I'm going wrong?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷乱花海 2024-12-16 11:53:35

问题是 people 是一个 IQueryable ,当您返回它并且消费者枚举结果时会重新查询 - 您更新的属性现在已经消失了,因为每个 person 实例是通过执行查询来重建的。

如果您想保留更改,则必须首先具体化数据,即使用 ToList(),然后将列表作为 IEnumerable (或 IList >)

The problem is that people is an IQueryable and is re-queried when you return it and the consumer enumerates the results - your updated properties are gone now, since each person instance is reconstructed by executing the query.

If you want to preserve changes you have to materialize your data first, i.e. using ToList() and then return the list as an IEnumerable (or IList)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文