如何在此 Linq 查询中避免多个“ToLower”?

用户96551

我正在通过 Linq 调用我的数据库,我试图在其中过滤数据库返回的数据。

但是,我的查询以多个不包含检查结束,其中必须将属性的每个实例单独转换为小写,以便不区分大小写。

我不完全确定是否有性能影响,但是否有办法更好地构建查询或优化它。

我当然想考虑到这一点。

var accounts = context.Accounts
                      .Where(x => !x.type.ToLower().Contains("distribution") 
                               && !x.type.ToLower().Contains("bonus")
                               && !x.type.ToLower().Contains("dividend") 
                               && !x.type.ToLower().Contains("redemption") 
                               && !x.type.ToLower().Contains("institutional") 
                               && !x.type.ToLower().Contains("unclaimed") 
                               && !x.type.ToLower().Contains("segregated") 
                               && !x.type.ToLower().Contains("discontinued") 
                               && !x.type.ToLower().Contains("retail") 
                               && !x.type.ToLower().Contains("cumulative") 
                               && !x.type.ToLower().Contains("monthly payment option") 
                               && !x.type.ToLower().Contains("payout") 
                               && !x.type.ToLower().Contains("withheld") 
                               && !x.type.ToLower().Contains("pf") 
                               && !x.type.ToLower().Contains(" p f "))
                      .ToList();
TDao

您可以将所有断言的字符串放在一个集合中,并利用 linq All 方法。像这样的东西:

private static readonly string[] Filters = new []
{
    "distribution",
    "bonus",
    "dividend",
    "redemption",
    "institutional",
    "unclaimed",
    "segregated",
    "discontinued",
    "retail",
    "cumulative",
    "monthly payment option",
    "payout",
    "withheld",
    "pf",
    " p f "
};

var accounts = context.Accounts.Where(x => Filters.All(f => !x.ToLower().Contains(f))); 

或更优化:

var accounts = context.Accounts.Where(x => Filters.All(f => !x.Contains(f, StringComparer.CurrentCultureIgnoreCase))); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章