我试图使用LINQ迭代一个对象的IEnumerable,并将每个对象的某个属性拉出到该属性类型的IEnumerable中。
我目前正在使用SelectMany LINQ表达式执行此操作,但不是返回我想要的IEnumerable<string>
(因为属性是字符串),而是返回IEnumerable<char>
var propertyValues = objectCollection.SelectMany(o => o.Value);
我错过了什么?
答案 0 :(得分:8)
如果它返回IEnumerable<char>
那么就是这样。猜测你想使用Select()而不是SelectMany(),我猜它会把一堆字符串弄平为IEnumerable<char>
。如果您可以发布更多显示objectCollection
内容的代码,我们可能会提供更多帮助。
修改强>
更多代码来说明我的观点
List<string> stringList = new List<string>();
stringList.Add("string1");
stringList.Add("string2");
IEnumerable<char> chars = stringList.SelectMany(x => x);
答案 1 :(得分:5)
您希望Select
代替SelectMany
。 SelectMany
将展平一系列序列。你基本上是投射到一系列字符串 - 而字符串是一系列字符,所以Selectmany
将字符串序列展平为单个字符序列。
尝试:
var propertyValues = objectCollection.Select(o => o.Value);
答案 2 :(得分:2)
使用Select(o => o.Value)
。 SelectMany会展开集合,因此它会选择所有字符串Value
属性,然后将每个属性展平为一个字符列表。