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

时间:2011-05-13 11:02:00

标签: c# linq

我试图使用LINQ迭代一个对象的IEnumerable,并将每个对象的某个属性拉出到该属性类型的IEnumerable中。

我目前正在使用SelectMany LINQ表达式执行此操作,但不是返回我想要的IEnumerable<string>(因为属性是字符串),而是返回IEnumerable<char>

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

我错过了什么?

3 个答案:

答案 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代替SelectManySelectMany展平一系列序列。你基本上是投射到一系列字符串 - 而字符串是一系列字符,所以Selectmany将字符串序列展平为单个字符序列。

尝试:

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

答案 2 :(得分:2)

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