将导航属性中的字段作为c#中对象列表中的字符串返回

时间:2015-07-30 18:26:05

标签: c# asp.net-mvc

我有一个人类

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?

1 个答案:

答案 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))