2009-08-19 56 views
1

我想挑選一個列表項目5-10,並創建一個相同類型的新列表。 使用Linq我想到:與Linq縮小列表<xyz>

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

那麼首先,怎麼了?結果如何錯誤? – 2009-08-19 22:40:09

+1

5-10是6項;你的意思是Take(6)?或5-9? – 2009-08-19 22:42:05

回答

4

只是var newList = q.Skip(5).Take(5).ToList() ...你現有的代碼創建了很多對象,但沒有使用它們; 「ToArray()」被丟棄,「new List<xyz>()」也被丟棄。還有一個「collection.Select(e=>e)」,並不是很多...(隱藏在LINQ查詢語法中)。

2

最後一行應

smallcollection = q.Skip(5).Take(5).ToList(); 
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();