在LINQ查询中执行可变更新?

时间:2009-09-25 13:51:27

标签: c# linq nhibernate

我有一个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这样的操作?

1 个答案:

答案 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}

查询翻译器应该将投影发送到数据库,而不是新建两个小部件。