2009-08-19 31 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();