2014-10-17 43 views
2

我這裏的一切已經分組的IQueryable包含的項目,所以像LINQ:跳過和採取重複

var animals = new List<string>{"duck", "duck", "duck", "goose", "goose", "cow", "cow", "cow", "rabbit"}.AsQueryable(); 

如果我做

animals.Skip(2).Take(2); 

我會得到"duck", "goose"。但是,我想跳過前兩組不同的條目並獲得第三和第四("cow", "cow", "cow", "rabbit")。 LINQ中有這樣做的好方法嗎?

回答

3

您可以使用分組來輕鬆地跳過第一個,但獲得枚舉集有點複雜。我想,這應該這樣做:

animals.GroupBy(a => a) 
     .Skip(2) 
     .Take(2) 
     .SelectMany(a => a); 

GroupBySkip讓我們處理這些作爲羣體,其獲取的您的要求的第一位。然後,我們只需在最後用SelectMany重新擴展分組。

+1

輝煌的思想思想相似。 :p – 2014-10-17 01:54:31

+0

這太好了。謝謝! – 2014-10-17 14:25:12

0

變種動物=新列表{ 「鴨」, 「鴨」, 「鴨」, 「鵝」, 「鵝」, 「牛」, 「牛」, 「牛」, 「兔子」}。 AsQueryable已();

var names = animals.Distinct()。Skip(2).Take(2).ToList();

var result = animals.Where(name => names.Contains(name));