2013-12-13 95 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)) 
);