【问题标题】:Update elements of sequence with linq without iterating on sequence using linq使用 linq 更新序列元素,而不使用 linq 迭代序列
【发布时间】:2013-01-08 00:35:17
【问题描述】:

我有一个如下查询,我想更新序列的所有元素。但不使用 foreach/for

var res = _context.tbl1.Where(/* Conditions here */);
res.//Using a method to performing changes;

【问题讨论】:

  • 如果你不检查每一个元素,你认为这将如何运作?
  • hm...我认为应该存在一个扩展方法来做到这一点,否则为什么我们可以使用 Where 迭代每个元素?

标签: c# linq-to-sql


【解决方案1】:

如果您问是否可以像在 sql 中一样在 linq-to-sql 中进行基于集合的更新,恐怕您不能。您要么必须单独更新每个 l2s 对象并在完成后调用 SubmitChanges(),要么使用您的 sql 查询调用 ExecuteCommand()

这是您可能感兴趣的主题 - http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/0f014318-5259-43c7-8518-06948cec465e

编辑:实际上,您可能对此感兴趣 - Updating multiple rows Linq vs SQL

如果你看一下,这里有一个链接 - http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx 看起来有点酷。可能得自己去看看!

【讨论】:

  • 谢谢,所以我不能这样做,也感谢提供的链接。我得到了答案
【解决方案2】:

为它写一个扩展方法

public static class IEnumerableExtensions
{
    public static void ForEach<T>(this IEnumerable<T> seq, Action<T> action)
    {
        foreach (var item in seq)
        {
            action(item);
        }
    }
}

但请注意,在后台您仍在循环 - 就像 Where 扩展方法和所有其他方法一样。扩展方法隐藏了循环。

【讨论】:

    【解决方案3】:

    您可以为 IEnumerable&lt;T&gt; 编写一个扩展方法,该方法确实迭代并执行您需要的操作,可能使用委托或 Func 使其更通用。

    【讨论】:

      【解决方案4】:

      你在找Select吗?

      【讨论】:

      • 在这种情况下,请参阅弗兰克的回答。 LINQ 默认只能用于选择数据,不能更新数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多