测试 List使用List的成员资格

发布于 2024-07-30 04:18:57 字数 1409 浏览 2 评论 0原文

有谁知道是否有一种方法可以利用列表来测试列表成员资格。 例如,我有一个名为 Membership 的类,它有一个类型为 List 的属性 Rebates。 我想使用 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,即 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;

Does anyone know if there is a way to test for list membership utilizing a list. For example I have a class named Membership which has a property Rebates which is of type List<Enums.RebateType>. I want to test using a lambda expression to see if that list contains any rebates that are of a specific type. My orginal lambda expression is as follows

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

Instead of having to do the following:

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)); 

I was wondering if something similar to the following mocked up SQL syntax could be done via one Lambda expression.

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

ValidRebateTypes is curently a List<Enums.RebateType> that I am testing for i.e. ValidRebateTypes = (Enums.RebateType.A, Enums.RebateType.B).

The work around I currently have is as follows:

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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哽咽笑 2024-08-06 04:18:57

听起来像您想要的:


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);

Sounds like you want:


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

You can then use .Count() for the count:


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

Or .Any() to determine the existence of any that satisfy that condition


Membership.Rebates.Any(r => ValidRebateTypes.Contains(r.RebateType) 
                            && r.RebateStatus == Enums.RebateStatus.Approved);
养猫人 2024-08-06 04:18:57

除了 Marc 的建议之外,我还建议将 ValidRebateTypes 设为 HashSet。 这不仅可能更有效(尽管可能不适用于一小部分),而且还揭示了您的意图(即其中 RebateType 的每个值只有一个)。

In addition to Marc's suggestion, I would recomment making ValidRebateTypes a HashSet<Enums.RebateType>. Not only is this likely to be more efficient (although possibly not for a small set), it also reveals your intent (ie. that there only be one of each value of RebateType in it).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文