2017-08-02 90 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好的斑點。我已經解決了我的答案。 –