C# 使用linq更新序列元素,而不使用linq对序列进行迭代
我有一个如下的查询,我想更新序列的所有元素。但不使用foreach/forC# 使用linq更新序列元素,而不使用linq对序列进行迭代,c#,linq-to-sql,C#,Linq To Sql,我有一个如下的查询,我想更新序列的所有元素。但不使用foreach/for var res = _context.tbl1.Where(/* Conditions here */); res.//Using a method to performing changes; 您正在寻找Select?您可以为IEnumerable编写一个扩展方法,该方法可以迭代并执行所需的操作,可能会使用委托或Func使其更通用。如果您询问是否可以像在sql中一样在linq到sql中进行基于集合的更新,恐怕您不能。
var res = _context.tbl1.Where(/* Conditions here */);
res.//Using a method to performing changes;
您正在寻找
Select
?您可以为IEnumerable
编写一个扩展方法,该方法可以迭代并执行所需的操作,可能会使用委托或Func使其更通用。如果您询问是否可以像在sql中一样在linq到sql中进行基于集合的更新,恐怕您不能。完成后,您必须单独更新每个l2s对象并调用SubmitChanges()
,或者使用sql查询调用ExecuteCommand()
这是一条你可能感兴趣的线索-
编辑:事实上,您可能会感兴趣-
如果你看一下,这里有一个链接,看起来有点酷。可能得亲自去看看 为它编写一个扩展方法
public static class IEnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> seq, Action<T> action)
{
foreach (var item in seq)
{
action(item);
}
}
}
公共静态类IEnumerableExtensions
{
公共静态void ForEach(此IEnumerable seq,Action)
{
foreach(序列中的var项目)
{
行动(项目);
}
}
}
但是请注意,在引擎盖下,您仍然在循环-就像Where扩展方法和所有其他方法一样。扩展方法隐藏了循环。如果不遍历每个元素,您认为这将如何工作?嗯。。。我认为应该存在一个扩展方法来实现这一点,否则为什么我们可以使用Where迭代每个元素?在这种情况下,请参见Frank的答案。默认情况下,LINQ只能用于选择数据,不能更新数据。谢谢,所以我不能这样做,也感谢提供的链接。我得到了答案