【问题标题】:Update multiple columns in linq using lambda expressions使用 lambda 表达式更新 linq 中的多个列
【发布时间】:2015-01-24 16:19:17
【问题描述】:

我想使用LinqLambda Expression 更新DataTable 中的记录。我可以如下更新一列

dtProduct.AsEnumerable().Where(i => i.Field<long>("ProductId") == Convert.ToInt64(id)).First().SetField("Qty", qty);

无法理解如何更新其他人:(。我最终为每一列写了几次更新。

【问题讨论】:

  • 您可以在选择中执行此操作,但您确实不应该这样做,一个好的经验法则是查询不应引起副作用。使用 Linq 检索您想要的记录,然后在 foreach 中迭代并设置您想要的值。

标签: c# asp.net linq datatable lambda


【解决方案1】:

我最终为每一列写了几次更新。

您的代码由两部分组成:

  • 定位实例,并
  • 设置其字段。

你可以通过引入一个变量来重用定位实例的结果:

var inst = dtProduct.AsEnumerable().Where(i => i.Field<long>("ProductId") == Convert.ToInt64(id)).First();

现在您可以多次调用SetField

inst.SetField("Qty", qty);
inst.SetField("Price", price);
inst.SetField("Weight", weight);

【讨论】:

  • 不错的答案,我不能单行吗?
  • @Imad 不幸的是,不,因为SetField 返回void。您可以引入自己的 SetFieldAndChain 方法,该方法返回原始的 DataRow,但这可能会稍微不那么可读。
  • 这是个好主意。我一定会实施:)
猜你喜欢
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多