LINQ 通过比较枚举从列表中获取列表
本文关键字:列表 获取 枚举 比较 LINQ | 更新日期: 2023-09-27 18:30:17
我试图通过比较传递到方法中的枚举来从列表中获取对象列表。
public List<IAnimal> GetListOfAnimalsByType(IAnimal.AnimalType animalType)
{
List<IAnimal> animalTypeList = animalList.SelectMany(ani => ani.Type == animaleType);
if(animalTypeList != null)
{
return animalTypeList;
}
else
{
return null;
}
}
看起来你真的只是想要Where
而不是SelectMany
:
public List<IAnimal> GetListOfAnimalsByType(IAnimal.AnimalType animalType)
{
return animalList.Where(ani => ani.Type == animaleType).ToList();
}
SelectMany
用于从原始序列中的每个元素中提取一个序列,并且通常将生成的序列"扁平化"在一起......而Where
用于过滤。
此外:
ToList()
调用是必需的,因为 LINQ 返回IEnumerable<T>
或IQueryable<T>
,而不是List<T>
- 您的
if
语句作为序列生成 LINQ 运算符是不必要的(例如Where
、Select
等从不返回空值;如有必要,他们将返回一个空序列 - 即使调用可能返回 null,在这两种情况下您都会返回
animalTypeList
的值......"如果值为空,则返回空,否则返回值"...所以你仍然可以只返回调用的结果
您应该使用 ToList
从SelectMany
中获取列表。此外,Where
就足够了。
方法SelectMany
和Where
返回一个IEnumerable<TSource>
,这当然不是List<T>
。这就是为什么你需要打电话给ToList
.
List<IAnimal> animalTypeList = animalList
.Where(ani => ani.Type == animaleType)
.ToList();