举个简单的例子,我有一个这样的类:
public class MyClass {
public string name;
public int item1;
public int item2;
}
和List(MyClass),如何查询列表以创建item1和item2字段的List(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列表?或者我误解了匿名类型的用途?
答案 0 :(得分:2)
如果您不喜欢使用匿名类型,则可以始终使用Tuple
var result = myList.Select(i => Tuple.Create(i.item1, i.item2) )
但由于item1
和item2
都是整数,因此您可以使用数组:
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 :(得分: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));