2017-08-02 112 views
0

我是比较新的波长/ 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.EventCalend ar'

编辑:添加声明行... EventCalendar eventCalendar;

回答

1

Events_Calendars.Where返回IQueryable<Models.EventCalendar>这意味着的Models.EventCalendar项的一些“查询源”,但Events_Calendars.Find返回一个Models.EventCalendar,所以你不能在某组Models.EventCalendar转换为Models.EventCalendar。您可以declarate新varibale eventCalendars和存储的过滤项目吧:

var eventCalendars = db.Events_Calendars.Where(x => x.Events.Any(y => y.End >= DateTime.Today)).ToList(); 

您也可以readIQueryableIEnumerable

+0

您的解释和示例让我更好地理解了该问题(感谢额外阅读), 我仍然需要通过特定的日历来限制它,并且只列出未来事件。我很难理解如何过滤虚拟事件,因为它本质上是从第二个表中提取数据。 – thefid

+0

更新:我通过将“&& x.Id == id”添加到where子句来解决单个日历问题,但未来日期的筛选器仍然无效。 – thefid

+0

@thefid将有关新错误或异常的信息放入当前问题中(如果有)。你确定'db.Events_Calendars'不是空的,你需要比较'y.End> = DateTime.Today',而是'y。开始> = DateTime.Today'? –

1

下一步你where子句使用.ToList(),并且还声明或者变种列表=或列表

1

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();

+0

不幸的是它不会工作之间的区别,因为'Events_Calendars.Where'返回' IQueryable的'。例如,“where”结果应该被转换为“List”或其他IEnumerable。 –

+0

@GeorgeAlexandria好的斑点。我已经解决了我的答案。 –