a.Charge.Company.Name
是一個字符串 ,這裏是我的lambda表達式爲什麼我的lambda表達式是一個字符?
var CompanyNameList = Prop.ChargeItems.SelectMany(a => a.Charge.Company.Name).ToList();
然而CompanyNameList
是List<char>
不List<string>
... 爲什麼?
a.Charge.Company.Name
是一個字符串 ,這裏是我的lambda表達式爲什麼我的lambda表達式是一個字符?
var CompanyNameList = Prop.ChargeItems.SelectMany(a => a.Charge.Company.Name).ToList();
然而CompanyNameList
是List<char>
不List<string>
... 爲什麼?
您正在使用SelectMany
,這意味着項目可枚舉的另一個枚舉的個別項目。 Company.Name
我認爲是一個字符串,它是一個集合char
s。
根據您的預期,您可能只想使用Select
。
這是因爲SelectMany,你可能需要在這裏選擇。
的SelectMany:項目的序列中的每個元素到IEnumerable 並將結果序列合併爲一個序列。
所以執行SelectMany
你IEnumerable<char>
,你叫ToList()
後,其突出的List<char>
還有其他一些答案,但我想我會包括一個解釋。
如果你看一個String的MSDN的定義,你會看到它作爲一個IEnumerable<char>
實現:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class String : IComparable,
ICloneable, IConvertible, IComparable<string>, IEnumerable<char>,
IEnumerable, IEquatable<string>
然後,比較,爲的SelectMany的definiton:
將序列的每個元素投影到IEnumerable並將所得序列展平成一個序列
(這裏有一個相當不錯的視覺解釋:http://www.codethinked.com/a-visual-look-at-the-linq-selectmany-operator)
由於SelectMany
將把String
爲IEnumerable<char>
對象, 我們可以推斷,從.SelectMany(x => x.Name)
結果集合將是由所有包含的字符的IEnumerable<char>
在Name
之內。
因此,在這種情況下,因爲你真的只想找所有包含在您a.Charge.Company
對象中的Name
弦,你真的只需要使用Select
:由於您使用`SelectMany`
var CompanyNameList = Prop.ChargeItems.Select(a => a.Charge.Company.Name).ToList();
這是非常有你,我欣賞它! – Pinch
。你可能只想要'選擇'。 – vcsjones
@vcsjones應該把這作爲一個答案 –
非常感謝幫助! – Pinch