我有一个包含另一个对象集合的对象。集合对象有2个属性,两个属性都是字符串。
例如:
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做到这一点?我尝试过使用Aggregate方法,如下所示:
<asp:Label ID="Label1" runat="server" Text='<%# Department.People.Select (x=>x.FirstName).Aggregate((x,y) => x + ",<br>" + y) : "" %>'></asp:Label>
这适用于1个字符串,即名字,但是当想要包含第二个字符串,即LastName
时,它无法工作提前致谢
答案 0 :(得分:4)
使用Select
和String.Join
:
var people = department.People.Select(p => string.Format("{0} {1}",
p.FirstName, p.LastName));
string result = string.Join(",<br>", people);
请注意,我不会在ASP.NET中使用<br>
,而是使用ListBox
或Repeater
等适当的控件。但这是另一个问题。
答案 1 :(得分: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)) %>'
答案 2 :(得分:1)
只需在选择
中进行连续x=>x.FirstName + " " + x.LastName
答案 3 :(得分:0)
using System.Linq;
Department data = ...something...;
var names = string.Join(
", ",
data.People.Select(x => string.Format("{0} {1}", x.FirstName, x.LastName))
);