代码之家  ›  专栏  ›  技术社区  ›  nojohnny101

按变量筛选列表的唯一LINQ(不区分大小写)

  •  1
  • nojohnny101  · 技术社区  · 7 年前

    public int practice_example6 (List<Car> cars)
    

    我想按筛选此列表 Make 包含单词 "Toyota" 但该过滤器不区分大小写。我的其他条件是 SuggestedRetailPrice 应小于30000。

    我想我就快到了,但对如何处理不区分大小写的问题感到困惑。

    if (cars == null)
    {
       return 0;
    }
    else
    {
       List<Car> filtered = cars.Where(x => x.Make == "honda").ToList();
       List<Car> filtered2 = cars.Where(x => x.Make == "Honda").ToList();
       List<Car> filtered3 = cars.Where(x => x.SuggestedRetailPrice < 30000).ToList();
    }
    

    我也不确定如何在一个返回语句中返回3个变量(filtered1,2,3)。也许只是把这3个变量合并成一个变量,然后返回它?

    谢谢

    3 回复  |  直到 7 年前
        1
  •  4
  •   Gilad Green Fábio    7 年前

    使用不敏感的 IndexOf

    return cars.Where(x => x.Make.IndexOf("honda", StringComparison.OrdinalIgnoreCase) != -1 ||
                           x.SuggestedRetailPrice < 3000)
               .ToList();
    


    此外,您的功能是 public int practice_example6 (List<Car> cars) IEnumerable<Car> Count

    public int practice_example6(List<Car> cars)
    {
        return cars == null ? 0 :
            cars.Count(x => x.Make.IndexOf("honda", StringComparison.OrdinalIgnoreCase) != -1 ||
                            x.SuggestedRetailPrice < 3000);
    }
    

    对于连接3个集合的一般情况,使用 Concat Union 视情况而定: Union Vs Concat in Linq

    filtered.Concat(filtered2).Concat(filtered3);
    
        2
  •  1
  •   gpanagopoulos    7 年前

    您可以尝试:

    string.Equals(x.Make, "Honda", StringComparison.CurrentCultureIgnoreCase);
    

    比如:

    List<Car> filtered = cars.Where(x => string.Equals(x.Make, "Honda", StringComparison.CurrentCultureIgnoreCase)).ToList();
    

    if (cars == null)
    {
       return 0;
    }
    else
    {
       return cars.Count(x => string.Equals(x.Make, "Honda", StringComparison.CurrentCultureIgnoreCase) && x.SuggestedRetailPrice < 30000);
    }
    
        3
  •  0
  •   Youssef13    7 年前

    这个怎么样?

       List<Car> filtered = cars.Where(x => x.Make.ToLower() == "honda").ToList();