繁体   English   中英

使用Lambda表达式查找列表中的项目

[英]FIND items in list using lambda expression

我有以下课程:

public class AuthenticateCustomerResponse
{
    public EligiblePromotions EligiblePromotions { get; set; }
}

public class EligiblePromotions
{
    public List<PromotionList> PromotionList { get; set; }
}
public class PromotionList
{
    public string LineOfBusiness { get; set; }
    public AuthenticatePromotions Promotions { get; set; }
}
public class AuthenticatePromotions
{
    public List<AuthenticatePromotion> Promotion { get; set; }
}
public class AuthenticatePromotion
{
    public string ServiceType { get; set; }
}

我想检索其LineOfBusiness等于“ VID”且ServiceType等于“ SAT”的PromotionList 我尝试了以下lambda表达式:

PromotionList getPromotion = AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Find(p => p.LineOfBusiness.ToUpper().Equals("VID")).Promotions.Promotion.Find(o=>o.ServiceType.Equals("SAT"));

但我收到错误消息:

无法将类型'AuthenticatePromotion'隐式转换为'PromotionList'

我究竟做错了什么?

下面的代码将使您获得LineOfBusiness等于'VID'的第一个对象。

var promotionList = AuthenticateCustomerResponse.EligiblePromotions.PromotionList
.Where(p => p.LineOfBusiness.ToUpper().Equals("VID")).FirstOrDefault();

如果希望所有具有VID作为LineOfBusiness对象而不是.ToList()则可以使用.FirstOrDefault()

编辑:如果要检查SAT,则可以在.Where()添加另一个子句.Where()

这部分代码

.Promotion.Find(o=>o.ServiceType.Equals("SAT"));

返回AuthenticatePromotion ,但是您正在明确要求一个PromotionList对象。

消除错误的一种方法是使用隐式变量关键字var

var getPromotion = AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Find(p => p.LineOfBusiness.ToUpper().Equals("VID")).Promotions.Promotion.Find(o=>o.ServiceType.Equals("SAT"));

但这当然仍然会返回AuthenticatePromotion

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM