使用LINQ查询和更新集合中的属性

使用LINQ更新集合中特定项目的单个属性的最简单/最简单的方法是什么?

例如,如果我有以下列表:

public class Ticket
{
    public string Name { get; set; }
    public string Code { get; set; }
    public bool Selected { get; set; }
}

如何使用LINQ来更新Ticket项目的“Selected”属性,其中“Name”属性的值为“Beach”。 在SQL中它将是:

UPDATE Tickets SET Selected = true WHERE Name = 'Beach'

我以为我在这条正确的轨道上...

tickets.Select(x => { x.Selected = true; return x; }).ToList().Where(x => x.Name == "Beach");

您可以更改订单,然后使用ForEach操作员:

tickets
   .Where(x => x.Name == "Beach")
   .ToList()
   .ForEach(x => { x.Selected = true; });

注意:

  • ToList()是必需的,因为IEnumerable不支持在Linq中使用ForEach - 请参阅针对IEnumerable <T>的foreach的LINQ等效项
  • 为了可读性,将它分离为linq查询和更传统的foreach(x in list)可能会更好一些。
  • 如果这是linq-to-sql,那么您需要调用SubmitChanges()以保持您的更改。

  • 回答迟了一点,但我想我们不需要像ToList()所提到的那样转换为ToList() ,我们实际上可以做的只是调整Stuart代码(这是一段很棒的代码),如下所示

    tickets
       .Where(x => x.Name == "Beach")
       .All(x => x.Selected = true);
    

    另外一个选择

    tickets
       .Where(x => x.Name == "Beach")
       .All(x => { x.Selected = true; return true; });
    

    让我先说这个,不要使用LINQ来设置这样的属性,这不是LINQ意味着如何使用。

    您应该编写查询来选择要更改的行,在循环中更改它们,并将更改提交到数据库(如果LINQ to SQL)。

    var query = tickets.Where(ticket => ticket.Name == "Beach");
    foreach (var item in query)
        item.Selected = true;
    
    // if LINQ to SQL
    context.SubmitChanges();
    
    链接地址: http://www.djcxy.com/p/53009.html

    上一篇: Query and updating a property in a collection using LINQ

    下一篇: C#: yield return range/collection