使用LINQ表达式从POCO的IEnumerable中检索属性的IEnumerable

7
我试图使用LINQ迭代一个对象的IEnumerable,并从每个对象中提取特定属性,将其放入该属性类型的IEnumerable中。
我目前正在使用SelectMany LINQ表达式进行操作,但是它返回的是IEnumerable(因为该属性是字符串),而不是我所需的IEnumerable。
var propertyValues = objectCollection.SelectMany(o => o.Value);

我错过了什么?
3个回答

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);

但是没有char属性 - value属性是一个字符串,在任何地方都没有提到char! - jcvandan
2
@dormisher:是的,有:string 实现了 IEnumerable<char> - Jon Skeet

5

您需要使用Select而不是SelectManySelectMany会将一个序列中的序列“展平”。您基本上是将其投影到一系列字符串上 - 字符串是字符序列,因此Selectmany将字符串序列展平为单个字符序列。

尝试:

var propertyValues = objectCollection.Select(o => o.Value);

2
使用 Select(o => o.Value)。SelectMany可以展平集合,所以它选择所有字符串 Value 属性,然后将每个属性展平为字符列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接