我对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&lt; ... Models.EventCalendar&gt;'到'... Models.EventCalendar'
编辑:添加了声明行... EventCalendar eventCalendar;
答案 0 :(得分:1)
在where子句旁边使用.ToList()并声明var list =或list
答案 1 :(得分: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();
答案 2 :(得分:1)
您的Events_Calendars.Where
会返回IQueryable<Models.EventCalendar>
,这意味着一些&#34;查询来源&#34; Models.EventCalendar
项Events_Calendars.Find
项,但Models.EventCalendar
返回Models.EventCalendar
项,因此您无法将某些Models.EventCalendar
转换为eventCalendars
。您可以声明新的变量var eventCalendars = db.Events_Calendars.Where(x => x.Events.Any(y => y.End >= DateTime.Today)).ToList();
并将过滤项存储到它:
IQueryable
您也可以read了解IEnumerable
和$query = $db->query("select life_cycle, entered_into_service
from assets, all_items where assets.type = all_items.type
and assets.make = all_items.make and assets.model = all_items.model
and all_items.item_num ='.$submittedValue'");