c# – linq查询EVER可以更改其数据源,即字典的内容吗?
发布时间:2020-12-16 01:57:41 所属栏目:百科 来源:网络整理
导读:在我看来,Linq只能查询给定的数据源,也就是说,它浏览它并根据需要从中返回东西,但不会改变任何东西.但是,我在这个问题上找到的一些答案中的措辞让我怀疑这种理解.在所有情况下,我的理解是否正确? linq查询是否可以更改与其关联的数据源的内容? 解决方法 Ca
在我看来,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将转换为表达式,而表达式又需要由提供程序转换为其他形式(即:Entity Framework将其转换为SQL).因此,如果提供者的编写方式可以转化为有意义的形式,那么您将只能创建副作用,这种情况不太可能发生. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |