运行我的项目后,visual studio在我的Index.cshtml中向我展示了这个System.NotSupportedException
这是我的HomeController
public class HomeController : BaseController
{
public ActionResult Index()
{
var events = this.db.Events
.OrderBy(e => e.StartDateTime)
.Where(e => e.IsPublic)
.Select(e => new EventViewModel()
{
Id = e.Id,
Title = e.Title,
Duration = e.Duration,
Author= e.Author.FullName,
Location = e.Location
});
var upcomingEvents = events.Where(e => e.StartDateTime > DateTime.Now);
var passedEvents = events.Where(e => e.StartDateTime <= DateTime.Now);
return View(new UpcomingPassedEventsViewModel()
{
UpcomingEvents = upcomingEvents,
PassedEvents = passedEvents
});
}
}
}
这是我的EventViewModel.cs
public class EventViewModel
{
public int Id { get; set; }
public string Title { get; set; }
public DateTime StartDateTime { get; set; }
public TimeSpan? Duration { get; set; }
public string Author { get; set; }
public string Location { get; set; }
}
答案 0 :(得分:0)
您将实体投影到视图模型中。这是一件好事,但之后您无法再次为查看模型优化查询。您在EventViewModel.StartDateTime
上查询,您甚至不会映射。
您需要在映射之前添加查询。当然,您不想复制映射代码,因此请将其放在方法中:
public ActionResult Index()
{
var events = this.db.Events
.OrderBy(e => e.StartDateTime)
.Where(e => e.IsPublic);
var upcomingEvents = events.Where(e => e.StartDateTime > DateTime.Now);
var passedEvents = events.Where(e => e.StartDateTime <= DateTime.Now);
return View(new UpcomingPassedEventsViewModel()
{
UpcomingEvents = upcomingEvents.Select(Map).ToList(),
PassedEvents = passedEvents.Select(Map).ToList()
});
}
private EventViewModel Map(EventDataModel e)
{
return new EventViewModel()
{
Id = e.Id,
Title = e.Title,
Duration = e.Duration,
Author= e.Author.FullName,
Location = e.Location
};
}
答案 1 :(得分:0)
&#34; BugFinder&#34;回答了我的问题。我的活动没有举办StartDateTime。所以,这是答案
var events = this.db.Events
.OrderBy(e => e.StartDateTime)
.Where(e => e.IsPublic)
.Select(e => new EventViewModel()
{
Id = e.Id,
Title = e.Title,
StartDateTime = e.StartDateTime,
Duration = e.Duration,
Author= e.Author.FullName,
Location = e.Location
});