我对Lambda/Linq比较陌生,但是我想从一个特定的日历中检索所有的事件,这些事件仍然是在未来发生的……
如果我使用:
EventCalendar eventCalendar;
eventCalendar = db.Events_Calendars.Find(id);我可以获取所有事件并根据视图中的当前日期进行过滤,但我不认为这是最好的方法。
模型如下:
[Table("Events_Calendars")]
public class EventCalendar
{
public int Id { get; set; }
public string Calendar { get; set; }
public virtual List<Event> Events { get; set; }
}事件模型为:
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int? Capacity { get; set; }
.
.
.
}我在这个问题上失败的尝试之一是:
eventCalendar = db.Events_Calendars.Where(x => x.Events.Any(y => y.End >= DateTime.Today));但是它给了我“无法隐式地将类型'System.Linq.IQueryable<...Models.EventCalendar>‘转换为'...Models.EventCalendar’”
编辑:增加了申报行...EventCalendar eventCalendar;
发布于 2017-08-03 07:21:54
您的Events_Calendars.Where返回IQueryable<Models.EventCalendar>,这意味着一些Models.EventCalendar项的“查询源”,但是Events_Calendars.Find返回一个Models.EventCalendar,因此您不能将一组Models.EventCalendar转换为Models.EventCalendar。您可以声明新的varibale eventCalendars并将筛选项存储到其中:
var eventCalendars = db.Events_Calendars.Where(x => x.Events.Any(y => y.End >= DateTime.Today)).ToList();你也可以通过read了解IQueryable和IEnumerable之间的区别
发布于 2017-08-03 07:07:02
在where子句旁边使用.ToList()并声明var list =或list
发布于 2017-08-03 07:09:34
Linq Where方法返回匹配实体的列表。您正尝试将其返回给定义为单个实体的变量。如果将eventCalendar定义为IQueryable<Models.EventCalendar>类型,而不是Models.EventCalendar类型,则Linq语句将起作用。
或者,您可以将eventCalendar定义为更健壮的List<Models.EventCalendar>,并在查询结束时使用Linq方法ToList()。即。eventCalendar = db.Events_Calendars.Where(x => x.Events.Any(y => y.End >= DateTime.Today)).ToList();
https://stackoverflow.com/questions/45472316
复制相似问题