获取全部而不是FirstOrDefault

时间:2016-12-02 11:46:33

标签: c# linq lambda

我有以下查询:

PromotionList dataPromotion = authenticateCustomerResponseRootObject.Response
    .AuthenticateCustomerResponse.EligiblePromotions.PromotionList
    .Where(p => p.LineOfBusiness.ToUpper().Equals("DATA"))
    .FirstOrDefault();

我的PromotionList包含3个对象,LineOfBusiness DataVideo,第三个对象也包含Data。上面的查询只返回第一个对象的PromotionList,而我想要LineOfBusiness等于Data的ALL。为什么会这样?

1 个答案:

答案 0 :(得分:2)

您正在使用FirstOrDefault,因此您只返回第一个。

PromotionList dataPromotion = authenticateCustomerResponseRootObject.Response.AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Where(p => p.LineOfBusiness.ToUpper().Equals("Data")).FirstOrDefault();

如果您希望所有这些广告在最后删除该电话,并替换为满足您需求的ToListToArray或类似电话:

var data = authenticateCustomerResponseRootObject.Response.AuthenticateCustomerResponse.EligiblePromotions.PromotionList.Where(p => p.LineOfBusiness.ToUpper().Equals("Data")).ToList();

同样如评论中所述,您的Where调用使用ToUpper,然后对包含小写字符的字符串进行比较,因此永远不会返回任何结果。您需要删除ToUpper,使用大写字符串或甚至使用忽略大小写:

Where(p => p.LineOfBusiness.Equals("Data", StringComparison.OrdinalIgnoreCase))