使用linq to SQL更新数据库中的多个记录而不进行循环,这是可能的吗?

本文关键字:循环 更新 SQL to linq 数据库 记录 使用 | 更新日期: 2023-09-27 18:14:26

好的,假设我想一次更新数据库中的多行,而不是循环,如果我们用循环来做,它可能是这样的:

var products = (from prod in context.Products
               where prod.ProductCategoryID == myProductID
               select prod).ToList();

// modify each object
foreach (var product in products)
{
    product.PhoneNumber = ???;
    product.Name = ???;
    product.Address = ???;
}

context.SubmitChanges();

有更好的方法吗?不做任何循环?考虑到我是linq的初学者,所以如果有更好的方法,如果你能给我提供一些例子,那就太好了,提前感谢。

使用linq to SQL更新数据库中的多个记录而不进行循环,这是可能的吗?

LINQ用于查询记录。你当前的foreach循环更可读,如果你尝试其他方法,那么它将在内部使用循环。

您可以看到使用LINQ修改集合的答案,但这不是推荐的方法。

你可以使用这一行:

var products = (from prod in context.Products
                where prod.ProductCategoryID == myProductID
                select new Product(prod.PhoneNumber.ToLower(), prod.Name.ToUpper(), prod.Address.Trim()).ToList();

如果你想在你的context对象中直接改变你的product:只在products类中创建一个特定的函数。它会设计得很好。

 (from prod in context.Products
  where prod.ProductCategoryID == myProductID
  select prod.MakeChange(myPhoneNumber, myName, myAddress);

由于您可以调用这行代码,因此应该沿着LINQ查询更改prod。