unique LINQ to filter list by variables(不区分大小写)

unique LINQ to filter list by variables (case insensitive)

我有

public int practice_example6 (List<Car> cars)

我想按包含单词 "Toyota"Make 过滤此列表,但不希望该过滤器区分大小写。我的其他条件是 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();
}

我也不确定如何在一个 return 语句中 return 3 个变量 (filtered1,2,3)。也许只是将这 3 个组合成一个变量,然后 return 那?

我是初学者,对此进行了研究。我希望得到解释,而不仅仅是修复。

谢谢!

编辑:我不应该在不将函数更改为 IEnumerable practice_example6(列出汽车)的情况下执行此操作 - 我知道这将是理想的,但有一些限制。

使用不敏感的 IndexOf:

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

请注意,忽略大小写也意味着输入 "honDa"/ "hONDA"/ "HONDA" 等也将被接受


此外,您的函数是 public int practice_example6 (List<Car> cars),其中 return 是一个整数。您不能以这种方式 return 筛选列表。把函数改成returnIEnumerable<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 个集合的一般情况,根据情况使用 ConcatUnion(Union Vs Concat in Linq)

filtered.Concat(filtered2).Concat(filtered3);

你可以试试:

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

这个呢?

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