2013-12-13 140 views
0

我有一個對象,其中包含另一個對象的集合。集合對象有兩個屬性,它們都是字符串。加入字符串列表

例如:

public class Department 
{ 
    List<Person> People{get;set}; 
} 

public class Person 
{ 
    string FirstName {get;set;}; 
    string LastName {get;set;} 
} 

基本上我只是想呈現一個逗號分隔列表中的名稱,使他們就會出現這樣的:

John Smith, 
Fred Smith 
etc... 

有沒有辦法做到這一點使用LINQ ?我已經使用聚合方法,像這樣的嘗試:

<asp:Label ID="Label1" runat="server" Text='<%# Department.People.Select (x=>x.FirstName).Aggregate((x,y) => x + ",<br>" + y) : "" %>'></asp:Label> 

這適用於1串即頭名,但不能得到它想要包括提前

感謝即2弦名字時工作

+0

@Habib:你的編輯似乎是不正確的,因爲它表明OP實際上想要用新行分隔每個名字。 –

+0

@TimSchmelter,當我嘗試編輯它時,名稱在編輯模式*中分開行*,但由於它們不在代碼塊中,所以它們出現在單行中,這就是我編輯的原因。 – Habib

+1

@Habib:他的代碼表明你的編輯是正確的,因爲他使用了'
'。 –

回答

4

使用SelectString.Join

var people = department.People.Select(p => string.Format("{0} {1}", 
            p.FirstName, p.LastName)); 
string result = string.Join(",<br>", people); 

請注意,我不會在ASP.NET使用<br>的,但適當的控制像ListBoxRepeater。但那是另一個問題。

+0

如果我告訴你我的名字是''(或更邪惡的東西)?一個好的解決方案應該包括某種安全轉義。 –

+1

我認爲這是另一個問題。我補充說,使用'
'並不是在ASP.NET中顯示多個項目的最佳方式。除此之外,一個'Label'將阻止你這樣的簡單攻擊,因爲文本將被編碼。 –

2

使用string.Join在後面的代碼,如:

Label1.Text = string.Join(",<BR />", 
        Department.People.Select(r=> r.FirstName + " " + r.LastName)); 

或者在ASPX

Text='<%# string.Join(",<BR />", 
         Department.People.Select(r=> r.FirstName + " " + r.LastName)) %>' 
1

只是做了CONCAT在選擇

x=>x.FirstName + " " + x.LastName 
0
using System.Linq; 

Department data = ...something...; 
var names = string.Join(
    ", ", 
    data.People.Select(x => string.Format("{0} {1}", x.FirstName, x.LastName)) 
);