我有以下课程:
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; }
}
我想要检索PromotionList
等于“VID”且LineOfBusiness
等于“SAT”的ServiceType
。
我试过跟随lambda表达式:
PromotionList getPromotion = AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Find(p => p.LineOfBusiness.ToUpper().Equals("VID")).Promotions.Promotion.Find(o=>o.ServiceType.Equals("SAT"));
但是我收到了错误:
无法将类型'AuthenticatePromotion'隐式转换为 'PromotionList'
我做错了什么?
答案 0 :(得分:2)
下面的代码将为您提供LineOfBusiness
等于'VID'的第一个对象。
var promotionList = AuthenticateCustomerResponse.EligiblePromotions.PromotionList
.Where(p => p.LineOfBusiness.ToUpper().Equals("VID")).FirstOrDefault();
如果您希望VID为.ToList()
的所有对象代替LineOfBusiness
.FirstOrDefault()
编辑:如果要查看SAT,可以在.Where()
添加另一个子句
答案 1 :(得分:0)
这部分代码
.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