有谁知道是否有一种方法可以使用列表来测试列表成员身份。例如,我有一个名为Membership的类,该类的属性为Rebates,类型为List<Enums.RebateType>。我想使用lambda表达式进行测试,以查看该列表是否包含特定类型的折扣。我的原始lambda表达式如下

return Membership.Rebates.Exists(rebate =>
    rebate.RebateType == Enums.RebateType.A &&
    rebate.RebateStatus == Enums.RebateStatus.Approved);


不必执行以下操作:

return Membership.Rebates.Exists(rebate =>
   (rebate.RebateType == Enums.RebateType.A &&
    rebate.RebateStatus == Enums.RebateStatus.Approved) ||
   (rebate.RebateType == Enums.RebateType.B &&
    rebate.RebateStatus == Enums.RebateStatus.Approved));


我想知道是否可以通过一个Lambda表达式来完成类似于以下模拟SQL语法的操作。

SELECT COUNT(*)
FROM Membership.Rebates
WHERE RebateType IN (ValidRebateTypes) AND Approved = true


ValidRebateTypes当前是我正在测试的List<Enums.RebateType>,即ValidRebateTypes =(Enums.RebateType.A,Enums.RebateType.B)。

我目前的工作如下:

bool exists = false;
foreach (Enums.RebateType rebateType in ValidRebateTypes())
{
    exists =  Membership.Rebates.Exists(
                rebate =>
                rebate.RebateType == rebateType &&
                rebate.RebateStatus == Enums.RebateStatus.Approved);
    if (exists) { break; }
}
return exists;

最佳答案

听起来像您想要的:


Membership.Rebates.Where(r => ValidRebateTypes.Contains(r.RebateType)
                              && r.RebateStatus == Enums.RebateStatus.Approved);


然后,您可以使用.Count()进行计数:


Membership.Rebates.Where(r => ValidRebateTypes.Contains(r.RebateType)
                              && r.RebateStatus == Enums.RebateStatus.Approved)
                  .Count();


或.Any()确定是否存在满足该条件的任何对象


Membership.Rebates.Any(r => ValidRebateTypes.Contains(r.RebateType)
                            && r.RebateStatus == Enums.RebateStatus.Approved);

09-27 17:07