2013-12-09 31 views
0

我試圖以{格式} {number}格式打印出電話號碼列表(每個數字\ n)。因此,從2號的列表我會打印出:使用lambda彙總匿名類型

Home: 111-111-1111 
Cell: 222-222-2222 

到目前爲止,我可以選擇成爲一個匿名類型,但是當我去聚合是leterally打印出整個匿名類型在屏幕上看着完全像下面:

new { phoneType = Home + ": ", phoneNumber = 111-111-1111 } 

我應該甚至使用聚合? 這就是我的工作:

PhoneNumbers.Select(x => new { phoneType = x.PhoneType, phoneNumber = x.PhoneNumber1 }).Aggregate(
       (p, x) => new { phoneType = p.phoneType + ": ", x.phoneNumber }); 

回答

4

如果你只是想要的電話號碼爲字符串,您可以在Select調用創建一個字符串:

var x = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber)); 

您彙總調用基本上是一個錯誤(假設它甚至編譯),因爲您將「當前」電話號碼與以前的電話類型組合在一起。這也是不必要的電話號碼是因爲現有的字符串方法的文本結合:

var phoneNumberStrings = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber)); 
var text = string.Join(Environment.NewLine, phoneNumberStrings); 
+0

缺少調用來實際執行查詢,如ToList,但總體上很好的答案。他不需要聚集,即使他想要的對象,而不是他只需要一個調用來執行查詢,而不是一個聚合函數 – BoredBlazer

+0

@BoredBlazer:不知道當你評論,但'string.Join'將枚舉什麼它給了。 –

+0

它是在您添加聚合解釋之前。我假設他試圖使用聚合來執行查詢或某事,所以我不希望他重複那個錯誤。 – BoredBlazer

2

雖然你可以做到這一點與IEnumerable<string>.Aggregate,我覺得它的清潔劑,如果你只使用string.Join。有人閱讀你的代碼,如果他們看到「用newline加入這些字符串」,他們可以更容易地理解這些意思。

string.Join(
    Environment.NewLine, 
    PhoneNumbers.Select(x => 
     string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));