【发布时间】:2018-04-29 20:26:12
【问题描述】:
我有以下类结构
public class OfferModelCollection
{
List<OfferModel> offers = new List<OfferModel>();
}
public class OfferModel
{
public int ID { get; set; }
public ProviderModel Provider { get; set; }
public ProviderType ProviderType { get; set; } //Enum
}
public class ProviderModel : BaseModel, IIdentity
{
public string ProviderCode { get; set; }
public string ProviderName { get; set; }
}
我现在正在尝试更新那些offers 中的ProviderType,其Provider.ProviderCode 与某个字符串值匹配。如何在 LINQ 中实现它?
类似这样的:
offersVM.Offers.Where(x=>x.Provider.ProviderCode.Contains("p10"))).ProviderType = ProviderType.Default;
【问题讨论】:
-
你的错误是什么?
-
Linq 中的 Q 代表“查询”,意思是查询,而不是更新。
-
您可以使用
.ForEach(),它不是 linq,而是您真正要寻找的 1 行 foreach -
这其实是一个有趣的问题。简短的回答你不应该。 Enumerable 应该是不可变的,“正确”的方式是在选择创建新对象并复制原始对象时创建新对象。由于 Body 表达式不适用于 IQueryable,这是唯一的方法。
-
@FilipCordas 您的简短回答不是答案。他在问如何在 linq 中做到这一点,而不是如果他应该这样做。顺便说一句,看看原来的问题(这是一个被骗的问题),你会对实际上不应该发生的事情感到惊讶