【问题标题】:Update multiple fields using single linq statement使用单个 linq 语句更新多个字段
【发布时间】:2013-04-11 22:38:14
【问题描述】:

我正在尝试找出是否可以使用 linq 更新 2 个或更多字段。

我发现这个示例显示 1 个属性已更新,但我不确定如何转换它。

listOfCompany.FirstOrDefault().Name = "Whatever Name"; // desc = "Whatever desc"

有什么想法吗?

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

    只需拉回整个实体而不是单个属性。

    var myEntity = listOfCompany.FirstOrDefault();
    if(myEntity!=null)
    {
       myEntity.Name = "Blah";
       myEntity.Something = "Blah 2";
    }
    

    【讨论】:

      【解决方案2】:

      当您想要更新对象列表时,您可以执行以下操作:

      var company = listOfCompany.FirstOrDefault();
      company.Name = "Name"; 
      company.Number = 14377;
      company.MyProp = obj;
      

      【讨论】:

        【解决方案3】:
        var x = listOfCompany.FirstOrDefault();
        x.Name = "Whatever Name";
        x.Desc = "Whatever Desc";
        

        你当然可以这样做:

        listOfCompany.FirstOrDefault().Name = "Whatever Name";
        listOfCompany.FirstOrDefault().Desc = "Whatever Desc";
        

        但我认为,充其量,它看起来很奇怪。

        请注意,如果 listOfCompany 没有任何项目,FirstOrDefault() 可能会返回 null,因此请小心假设引用返回的项目是安全的 FirstOrDefault() 然后尝试对其设置属性。

        我不知道有什么方法可以同时设置这两个属性。

        【讨论】:

          【解决方案4】:

          我建议不要这样做,因为它相当混乱。一次只更新每个字段要清楚得多。但这里是:

          listOfCompany.Select(c => new Company(){Name = "NewName", Number = 666, desc = c.desc}).FirstOrDefault();
          

          【讨论】:

            【解决方案5】:

            Linq 用于查询,而不是更新。你的例子相当于

            var temp = listOfCompany.FirstOrDefault()
            temp.Name = "Whatever Name";   
            // desc = "Whatever desc"
            

            显然第二行是一个基本的属性集——它与 Linq 没有任何关系。为了更新属性(无论是一个还是多个),您需要一个对项目的 reference,您可以使用 Linq 获得它:

            var company = listOfCompany.FirstOrDefault()
            company.name = "Whatever Name";
            company.desc = "Whatever desc";
            

            【讨论】:

              【解决方案6】:
              result.ForEach(x => x.User = _dbUsers.Users.Where(u => u.Id == x.Id_Users).Select(s => new { completeName = s.UserName + " " + s.UserSurName }).SingleOrDefault().completeName);
              

              【讨论】:

              • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-19
              • 1970-01-01
              • 1970-01-01
              • 2010-09-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多