我正在使用此代码,来自nerddinner示例。在控制器中调用时,此方法将显示数据库中所有即将到来的晚餐的列表。
public IQueryable<Dinner> FindUpcomingDinners()
{
return from dinner in entities.Dinners
where dinner.EventDate > DateTime.Now
orderby dinner.EventDate
select dinner;
}
我原以为:
public IQueryable<Dinner> FindUpcomingDinners()
{
return from dinner in entities.Dinners
where dinner.EventDate > DateTime.Now && dinner.HostedBy == User.Identity.Name
orderby dinner.EventDate
select dinner;
}
会给我一些由当前登录用户托管的晚餐,但是我收到三个错误:
委托'System.Func' 不带1个参数
无法将lambda表达式转换为类型'string',因为它不是a 委托类型
- 醇>
当前上下文中不存在“用户”名称
任何正确方向的指针都会受到赞赏:)
当前背景
答案 0 :(得分:2)
User.Identity.Name
仅在控制器中可用。所以你可以将它作为参数传递给你的方法:
public IQueryable<Dinner> FindUpcomingDinners(string user)
{
return from dinner in entities.Dinners
where dinner.EventDate > DateTime.Now && dinner.HostedBy == user
orderby dinner.EventDate
select dinner;
}
从控制器操作中调用此方法时:
var upcomingDinners = dinnerRepository.FindUpcomingDinners(User.Identity.Name);
还要确保需要对用户进行身份验证以调用此控制器操作([Authorize]
属性),否则如果匿名用户尝试调用它,您可能会收到异常。