用于查找属性的Lambda表达式

Hum*_*Ali 2 c# linq lambda

我想LineOfBusiness从等于的promotionCatalogResponseRootObject地方审视财产PromotionIDmyId

public class PromotionCatalogResponseRootObject
{
   public PromotionCatalogResponse PromotionCatalog { get; set; }
}

public class Promotion
{
  public string PromotionId { get; set; }
  public string LineOfBusiness { get; set; }
  public string PromotionName { get; set; }
}

public class PromotionCatalogResponse
{
  public List<Promotion> Promotion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我这样开始,但我知道我做错了.请指导

string myId = "7596";
string lineOfBusiness = dataPromotionCatalog.PromotionCatalog
                                            .Promotion.Find(p => p.LineOfBusiness);
Run Code Online (Sandbox Code Playgroud)

Gil*_*een 7

你所缺少的是该Find方法需要接受一个谓语用bool返回值,但你正在返回stringLineOfBusiness属性.

首先过滤所需的项目,然后选择所需的属性.另外,我会选择Where而不是Find.(Find()vs. Where().FirstOrDefault())

var result = dataPromotionCatalog.PromotionCatalog.Promotion
                                 .Where(i => i.PromotionId == myId)
                                 .Select(i => i.LineOfBusiness);
Run Code Online (Sandbox Code Playgroud)

或者在查询语法中

var result = (from item in dataPromotionCatalog.PromotionCatalog.Promotion
              where item.PromotionId == myId
              select item.LineOfBusiness);
Run Code Online (Sandbox Code Playgroud)

如果您期望/想要有一个项目,那么使用FirstOrDefault:

var result = dataPromotionCatalog.PromotionCatalog.Promotion
                 .FirstOrDefault(i => i.PromotionId == myId)?.LineOfBusiness;
Run Code Online (Sandbox Code Playgroud)

  • @HumaAli然后,在没有找到任何项目的情况下,您将得到一个`NullReferenceException`.检查我给出的关于`Null propagation`的链接 (2认同)