0

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

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

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

有任何想法吗?

4

6 回答 6

2

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

var myEntity = listOfCompany.FirstOrDefault();
if(myEntity!=null)
{
   myEntity.Name = "Blah";
   myEntity.Something = "Blah 2";
}
于 2013-04-18T17:20:52.570 回答
1

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

var company = listOfCompany.FirstOrDefault();
company.Name = "Name"; 
company.Number = 14377;
company.MyProp = obj;
于 2013-04-18T17:23:48.937 回答
1
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() 然后尝试对其设置属性。

我不知道一次设置两个属性的方法。

于 2013-04-18T17:24:05.467 回答
1

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

listOfCompany.Select(c => new Company(){Name = "NewName", Number = 666, desc = c.desc}).FirstOrDefault();
于 2013-04-18T17:29:15.307 回答
1

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";
于 2013-04-18T17:30:04.890 回答
-1
result.ForEach(x => x.User = _dbUsers.Users.Where(u => u.Id == x.Id_Users).Select(s => new { completeName = s.UserName + " " + s.UserSurName }).SingleOrDefault().completeName);
于 2021-10-28T14:37:09.687 回答