我试图找出是否可以使用 linq 更新 2 个或更多字段。
我发现这个示例显示 1 个属性已更新,但我不确定如何转换它。
listOfCompany.FirstOrDefault().Name = "Whatever Name"; // desc = "Whatever desc"
有任何想法吗?
只需拉回整个实体而不是单个属性。
var myEntity = listOfCompany.FirstOrDefault();
if(myEntity!=null)
{
myEntity.Name = "Blah";
myEntity.Something = "Blah 2";
}
当您想要更新对象列表时,您可以执行以下操作:
var company = listOfCompany.FirstOrDefault();
company.Name = "Name";
company.Number = 14377;
company.MyProp = obj;
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() 然后尝试对其设置属性。
我不知道一次设置两个属性的方法。
我建议不要这样做,因为它相当混乱。一次只更新一个字段就更清楚了。但这里是:
listOfCompany.Select(c => new Company(){Name = "NewName", Number = 666, desc = c.desc}).FirstOrDefault();
Linq 用于查询,而不是更新。你的例子相当于
var temp = listOfCompany.FirstOrDefault()
temp.Name = "Whatever Name";
// desc = "Whatever desc"
显然第二行是一个基本的属性集——它与 Linq 没有任何关系。为了更新属性(无论是一个还是多个),您需要对该项目的引用,您可以使用 Linq 获得该引用:
var company = listOfCompany.FirstOrDefault()
company.name = "Whatever Name";
company.desc = "Whatever desc";
result.ForEach(x => x.User = _dbUsers.Users.Where(u => u.Id == x.Id_Users).Select(s => new { completeName = s.UserName + " " + s.UserSurName }).SingleOrDefault().completeName);