我正在尝试使用 LINQ 迭代对象的 IEnumerable,并将每个对象的某个属性拉出到该属性类型的 IEnumerable 中。
我目前正在使用 SelectMany LINQ 表达式执行此操作,但它不是返回我想要的IEnumerable<string>
(因为该属性是一个字符串),而是返回一个IEnumerable<char>
var propertyValues = objectCollection.SelectMany(o => o.Value);
我错过了什么?
如果它返回一个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);
你想要Select
而不是SelectMany
。 SelectMany
将展平序列序列。你基本上是投影到一个字符串序列 - 字符串是一个字符序列,所以Selectmany
是将字符串序列平展为单个字符序列。
尝试:
var propertyValues = objectCollection.Select(o => o.Value);
使用 Select(o => o.Value)
.SelectMany 平展集合,因此它会选择所有字符串Value
属性,然后将每个属性平展为字符列表。