我想挑选一个列出项目5 - 10并创建一个相同类型的新列表。 使用Linq我想到了:
List<xyz> collection = new <List>();
//fill collection with lots of data
collection.AddRange( ... );
//Downsize here
var q = from e in collection select e;
q.ToArray();
List<xyz> smallcollection = new List<xyz>()
smallcollection = q.Skip(5).Take(5);
我做错了什么?
答案 0 :(得分:4)
只是var newList = q.Skip(5).Take(5).ToList()
...您现有的代码正在创建大量对象但不使用它们; “ToArray()
”被丢弃,“new List<xyz>()
”也被丢弃。还有一个“collection.Select(e=>e)
”并不是很多......(隐藏在LINQ查询语法中)。
答案 1 :(得分:2)
最后一行应为
smallcollection = q.Skip(5).Take(5).ToList();
答案 2 :(得分:1)
如果原始列表是List<T>
,则根本不需要LINQ。
您可以使用GetRange
方法,如下所示:
List<xyz> collection = new <List>();
//fill collection with lots of data
collection.AddRange( ... );
List<xyz> smallCollection = collection.GetRange(5, 5);
如果它不是List<T>
,您可以像这样使用LINQ:
List<xyz> smallCollection = q.Skip(5).Take(5).ToList();