2014-01-19 66 views
0

的多個領域對於簡單的例子,我有一個這樣的類:LINQ選擇同一類型

public class MyClass { 
public string name; 
public int item1; 
public int item2; 
} 

和列表(MyClass的),我該如何查詢列表中創建兩個字段的表(INT) item1和item2?看起來應該很簡單,但我很長時間都在掙扎。

var result = myList.Select(i => i.item1).ToList() //selects only one field 

我知道我可以使用匿名類型,但既然item1和item2都是整數,我不需要任何新類型。

var result = myList.Select(i => new { i.item1, i.item2}).ToList() //dont need new type, both are integers 

如何創建int列表?還是我誤解了匿名類型的作用?

回答

2

如果你不喜歡使用匿名類型,你總是可以使用Tuple

var result = myList.Select(i => Tuple.Create(i.item1, i.item2)) 

但由於雙方item1item2是整數,你可以使用數組:

var result = myList.Select(i => new[] { i.item1, i.item2 }) 

這將導致IEnumerable<int[]>。如果你想要一個IEnumerable<int>(每條記錄的item1和在了一起item2一個結果集),使用SelectMany

var result = myList.SelectMany(i => new[] { i.item1, i.item2 }) 
+1

謝謝,我=>新[] {i.item1,i.item2}解決了這個問題。當你第一次,我接受你的答案是正確的。 – wondra

0

您可以使用下面的表達式例如創建一個包含兩個項目來回原來的所有元素的列表列表myList

var result = myList.Select(i => item1).Concat(myList.Select(i => i.item2)); 
1

如果你想有一個扁平的列表,你可以這樣做:

List<int> ints = myList.SelectMany(i => new[] { i.item1, i.item2 }).ToList(); 
如果你想保留值加在一起,你可以創建一個元組

List<Tuple<int, int>> pairs = myList.Select(i => Tuple.Create(i.item1, i.item)).ToList(): 
+1

謝謝,我=>新的[] {i.item1,i.item2}解決它。 – wondra