使用单个linq语句更新多个字段

时间:2013-04-18 17:17:47

标签: asp.net linq

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

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

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

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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()的项目是安全的,然后尝试在其上设置属性。

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

答案 3 :(得分:1)

我会反对它,因为它相当令人困惑。更清楚的是一次只更新一个字段。但这是:

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

答案 4 :(得分: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";