从System.Collections.Generic.IEnumerable中取出前n个元素

时间:2016-06-20 16:06:10

标签: c# .net ienumerable

从数据库中我得到System.Collections.Generic.IEnumerable<CustomObject>的结果。将结果放入List<CustomObject>可以完美地运行。现在我想只拍摄前n个对象。这就是我尝试过的:

List<CustomObject> tempList = DataBase.GetAllEntries().Cast<CustomObject>().ToList();
tempList = tempList.Take(5);

在第二行我得到了

Error   CS0266  Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<CustomObject>' to 'System.Collections.Generic.List<CustomObject>'. An explicit conversion exists (are you missing a cast?)

我还尝试添加OrderBy(),仅使用ToList()(不使用强制转换)或其组合,但每次我收到上述错误。我应该改变什么?

2 个答案:

答案 0 :(得分:3)

在具体化(Take)之前放置ToList

List<CustomObject> tempList = DataBase.GetAllEntries()
  .Take(5)
  .Cast<CustomObject>()
  .ToList();

让实现成为最终操作。

答案 1 :(得分:2)

您的问题是tempListList<CustomObject>,但.Take()会返回IEnumerable<CustomObject>。您只需再次致电.ToList()即可解决问题:

tempList = tempList.Take(5).ToList();

或者,您可以在原始查询中添加.Take()方法,以避免构建2个列表:

List<CustomObject> tempList = DataBase.GetAllEntries().Take(5).Cast<CustomObject>().ToList();