【发布时间】:2013-04-11 22:38:14
【问题描述】:
我正在尝试找出是否可以使用 linq 更新 2 个或更多字段。
我发现这个示例显示 1 个属性已更新,但我不确定如何转换它。
listOfCompany.FirstOrDefault().Name = "Whatever Name"; // desc = "Whatever desc"
有什么想法吗?
【问题讨论】:
我正在尝试找出是否可以使用 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 没有任何关系。为了更新属性(无论是一个还是多个),您需要一个对项目的 reference,您可以使用 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);
【讨论】: