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

LINQ 通过比较枚举从列表中获取列表

看起来你真的只是想要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 运算符是不必要的(例如 WhereSelect等从不返回空值;如有必要,他们将返回一个空序列
  • 即使调用可能返回 null,在这两种情况下您都会返回 animalTypeList 的值......"如果值为空,则返回空,否则返回值"...所以你仍然可以只返回调用的结果

您应该使用 ToListSelectMany中获取列表。此外,Where就足够了。

方法SelectManyWhere返回一个IEnumerable<TSource>,这当然不是List<T>。这就是为什么你需要打电话给ToList.

List<IAnimal> animalTypeList = animalList
                               .Where(ani => ani.Type == animaleType)
                               .ToList();