代码之家  ›  专栏  ›  技术社区  ›  Huma Ali

LINQ检查布尔值

  •  3
  • Huma Ali  · 技术社区  · 8 年前

    我有一个附加配置的列表

    public class AffiliateConfiguration
    {
        public int AffiliateConfigurationId { get; set; }
        public string Name { get; set; }
        public bool IsActive { get; set; }
    }
    

    使用以下示例数据:

    (1,"AddOn",true)
    (2,"DummyEmail",false)
    (3,"ProviderType",true)
    

    基本上,如果我的列表包含名称等于ProviderType的任何项,并且其IsActive值包含false,我想执行一些操作。 我试过了,这是正确的方法吗?

    if (AffiliateConfigurations.Any(x => x.Name.Equals("ProviderType")) && !AffiliateConfigurations.FirstOrDefault(x => x.Name.Equals("ProviderType")).IsActive)
     {
        //perform some action
     }
    
    4 回复  |  直到 8 年前
        1
  •  9
  •   John Woo    8 年前

    这难道不像下面这个条件那么简单吗?您无需检查两次,因为您可以直接访问 IsActive 所有物

    if (AffiliateConfigurations.Any(x => x.Name.Equals("ProviderType") && !x.IsActive))
    {
    
    }
    
        2
  •  3
  •   programtreasures    8 年前

    您可以直接查看 IsActive

    if (AffiliateConfigurations.Any(x => x.Name.Equals("ProviderType") && !x.IsActive ) )
     {
        //perform some action
     }
    
        3
  •  0
  •   IPValverde    8 年前

    您正在执行两个验证: -首先,检查集合中是否至少有一个项目的名称与“ProvidersType”匹配。 -您可以再次遍历集合,以找到这样的项(自第一次验证通过后它将存在),并检查它是否处于活动状态。

    你可以在 单次运行 : if(附加配置.Any(x=>x.Name==“ProviderType”&x.IsActive==false/*或“!x.IsActive”*/)) { //执行一些操作 }

    如果您的“AffiliateConfigurations”是IEnumerable,那么可以“筛选”您的集合的大多数linq方法都将接受 Func<TypeBeingFiltered, bool> 或a Predicate<TypeBeingFiltered> (如 Any , Where , FirstOrDefault , Single , ...), 只要返回 bool 最后的值。

        4
  •  0
  •   tamilselvan719    8 年前

    只需像John Woo所说的那样使用此条件

    x => x.Name.Equals("ProviderType") && !x.IsActive
    

    它只在连接配置中循环一次,在您的方法中,它必须循环两次,一次用于任何部分,一次用于第一个或默认部分。。。