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 个集合的一般情况,根据情况使用 Concat
或 Union
:(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();
我有
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 个集合的一般情况,根据情况使用 Concat
或 Union
:(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();