有谁知道是否有一种方法可以使用列表来测试列表成员身份。例如,我有一个名为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);