我有一个人类
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Roles> roles { get; set; }
}
和角色类
公共类角色 { public string LongName {get;组; } public string ShortName {get;组; } public int Division {get;组; } }
在控制器中,我建立一个SelectListItem列表,如下所示:
List<SelectListItem> agencyList = players
.Select(p => new SelectListItem
{
Text = p.LastName + ", " + p.FirstName,
Value = Convert.ToString(p.ID)
})
.ToList();
我们说我有两个人,John Smith和Ralph Doe。还有一些角色,例如:
&#34;鱼贩子&#34;&#34; A&#34; 1 &#34;皮匠&#34;&#34; B&#34;,2 &#34; Ecthymologist&#34;&#34; C&#34;,3 等
上面的代码将返回如下列表:
"Smith, John"
"Doe, Ralph"
我想在那些SelectListItems中包含Roles.Shortname,所以他们可能会说
"Smith, John (A,B,C)"
"Doe, Ralph (A,D)"
etc.
有没有办法在.Select()中做到这一点,或者我是否需要创建一个foreach()循环并遍历所有人并以这种方式构建SelectListItem?
答案 0 :(得分:1)
如果您有加载到内存的播放器列表,您应该能够使用以下代码创建所需的输出:
.Select(p => new SelectListItem
{
Text = p.LastName + ", " + p.FirstName
+ "(" + String.Join(", ", p.Roles.Select(role=>role.ShortName)) + ")",
Value = Convert.ToString(p.ID)
})
在这种情况下,您可以像以前一样开始,但之后使用函数String.Join
来连接这些字符串。
为了更好的可读性和可能略微更好的性能,您可以使用string.Format
:
Text = string.Format("{0}, {1} ({2})", p.LastName, p.FirstName,
String.Join(", ", p.Roles.Select(role=>role.ShortName))