LINQ选择更多相同类型的字段

时间:2014-01-19 11:24:23

标签: c# linq

举个简单的例子,我有一个这样的类:

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

和List(MyClass),如何查询列表以创建item1和item2字段的Lis​​t(int)?它看起来应该很简单,但我很长时间都在挣扎。

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列表?或者我误解了匿名类型的用途?

3 个答案:

答案 0 :(得分: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>(每个记录的item1item2在一个结果集中),请使用SelectMany

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

答案 1 :(得分: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():

答案 2 :(得分:0)

例如,您可以使用以下表达式创建一个列表,其中包含原始列表myList的所有元素的两个项目。

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