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

时间:2014-11-13 12:17:42

标签: c# linq

我试图通过比较传递给方法的枚举来从列表中获取对象列表。

public List<IAnimal> GetListOfAnimalsByType(IAnimal.AnimalType animalType)
{
    List<IAnimal> animalTypeList = animalList.SelectMany(ani => ani.Type == animaleType);
    if(animalTypeList != null)
    {
        return animalTypeList;
    }
    else
    {
        return null;
    }
}

2 个答案:

答案 0 :(得分:3)

看起来你真的只想要Where而不是SelectMany

public List<IAnimal> GetListOfAnimalsByType(IAnimal.AnimalType animalType)
{
    return animalList.Where(ani => ani.Type == animaleType).ToList();
}    

SelectMany用于从原始序列中的每个元素中提取一个序列,通常&#34;展平&#34;结果序列在一起......而Where用于过滤。

此外:

  • ToList()调用是必要的,因为LINQ返回IEnumerable<T>IQueryable<T>,而不是List<T>
  • 您的if语句是不必要的,因为生成序列的LINQ运算符(例如WhereSelect等永远不会返回null;如果需要,它们将返回空序列
  • 即使调用 可以返回null,在这两种情况下都会返回animalTypeList的值...&#34;如果值为null,则返回null ,否则返回值&#34; ...所以你仍然可以只返回通话结果

答案 1 :(得分:2)

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

方法SelectManyWhere会返回IEnumerable<TSource>,当然不是List<T>。这就是你需要致电ToList

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