使用linq更新数据库中的多条记录到没有循环的sql,是否可能?

时间:2013-05-21 06:47:25

标签: c# asp.net linq linq-to-sql

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

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

2 个答案:

答案 0 :(得分:2)

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

您可以看到使用LINQ修改集合的this answer,但这不是推荐的方式。

答案 1 :(得分: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。