使用linq to sql不循环更新数据库中的多条记录,可能吗?

问题描述 投票:0回答:3

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

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 的初学者,所以如果有更好的方法,如果你给我提供一些例子那就太好了,提前谢谢。

c# asp.net linq linq-to-sql
3个回答
2
投票

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

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


0
投票

您可以使用该行:

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

如果您想直接在上下文对象中更改产品:仅在 Products 类中创建特定函数。它会简单地设计得很好。

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

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


0
投票

`var products =(来自上下文中的 prod.Products 其中 prod.ProductCategoryID == myProductID 选择产品).ToList();

products.All(w => { w.PhoneNumber = ???; w.Name = ???; w.Address = ???; return true; });`

© www.soinside.com 2019 - 2024. All rights reserved.