Asp.net mvc 4 方法的动态表达式

Asp.net mvc 4 方法的动态表达式,asp.net-mvc-4,webgrid,Asp.net Mvc 4,Webgrid,我不能让它工作 @grid.GetHtml( tableStyle: "bordertable", columns: grid.Columns( grid.Column("aaaa", format: @<text> @Roles.GetRolesForUser(@item.UserName).LastOrDefault() </text> ), grid.Column("UserName", "bbbb"), g

我不能让它工作

@grid.GetHtml(
   tableStyle: "bordertable",
   columns: grid.Columns(

       grid.Column("aaaa", format: @<text> @Roles.GetRolesForUser(@item.UserName).LastOrDefault() </text>  ),
       grid.Column("UserName", "bbbb"),
       grid.Column("FirstName", "cccc"),
       grid.Column("LastName", "dddd")
     ))

没有
@item.UserName
它工作得很好

没有
(@item.UserName)
它工作得很好,因为如果不精确指定源
LastOrDefault
默认情况下返回
null
。你可以看到关于这个的文档。所以你可以试着抓住例外来看看

我不完全理解,但我假设您的方法
Roles.GetRolesForUser()
返回
IEnumerable
。要使用linq扩展,请编写如下代码:

@Roles.GetRolesForUser().LastOrDefault(r=> r.UserName == item.UserName)
不是

此外,由于@已使用@角色定义,因此您不必再次使用@(@Item.UserName)


希望这有帮助

它在没有
@item.UserName的情况下也能工作。在我
m编写
(@item.UserName)`之后,UserName
VS stops recognize
GetRolesForUser()
在它内部是否覆盖了GetRolesForUser()?
@Roles.GetRolesForUser().LastOrDefault(r=> r.UserName == item.UserName)
@Roles.GetRolesForUser(item.UserName).LastOrDefault()
@Roles.GetRolesForUser().LastOrDefault(item.UserName)