我有一个LINQ查询,我想返回修改过的对象。如果我处于一种不可改变的功能性情绪中,我可能会做一些像copy-construtor这样的事情:
from widget in widgets select new widget { legs = widget.legs + 1, arms = widget.arms }
可悲的是,我在一个可变的NHibernate实体对象上做这个,我必须修改原始对象。我正在寻找一些带有副作用的匿名方法的语法,例如:
from widget in widgets select { widget.legs += 1; return widget }
(对Scala语法道歉)
现在,我可以在LINQ查询之外执行此更新,但如果可以,我宁愿进行内联。是否可以在LINQ中插入void
这样的操作?
答案 0 :(得分:2)
widgets
.ToList()
.Select(widget =>
{
widget.legs +=1;
return widget
})
.ToList()
ToList将枚举(运行)查询。
编辑,我插入了第二个ToList以允许使用Enumerable.Select而不是Queryable.Select。
您表示您希望NHibernate运行代码....意识到查询翻译符合您的要求,但不符合您的文字说明。
from old in widgets
select new widget() {legs = old.legs + 1, arms = old.arms}
查询翻译器应该将投影发送到数据库,而不是新建两个小部件。