2013-10-22 42 views
2

a.Charge.Company.Name是一個字符串 ,這裏是我的lambda表達式爲什麼我的lambda表達式是一個字符?

var CompanyNameList = Prop.ChargeItems.SelectMany(a => a.Charge.Company.Name).ToList(); 

然而CompanyNameListList<char>List<string> ... 爲什麼?

+7

。你可能只想要'選擇'。 – vcsjones

+0

@vcsjones應該把這作爲一個答案 –

+0

非常感謝幫助! – Pinch

回答

10

您正在使用SelectMany,這意味着項目可枚舉的另一個枚舉的個別項目。 Company.Name我認爲是一個字符串,它是一個集合char s。

根據您的預期,您可能只想使用Select

4

這是因爲SelectMany,你可能需要在這裏選擇。

的SelectMany:項目的序列中的每個元素到IEnumerable 並將結果序列合併爲一個序列。

所以執行SelectManyIEnumerable<char>,你叫ToList()後,其突出的List<char>

+0

請問您可以鏈接英文MSDN而不是意大利文(我猜)? – Win

+0

@Win:這是英文版。 – Tigran

+0

現在已經修復。謝謝! +1 – Win

3

還有其他一些答案,但我想我會包括一個解釋。

如果你看一個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將把StringIEnumerable<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(); 
+0

這是非常有你,我欣賞它! – Pinch

相關問題