这是我的情况:
我有艺术家和事件之间的 am:n 关系。我想要做的是获得一个 IQueryable 只包含包含某个艺术家的事件。我正在为我的数据访问层使用存储库。显然,以下方法不起作用:
_db.EventSet.Include("Location").Where(e => (e.Artists.Contains(artist)) && (e.StartDate > System.DateTime.Now)).OrderBy(e => e.StartDate);
由于我是实体框架的新手,我真的不明白为什么,但我可以猜到。因此,如果有人能以非常简单的方式解释这一点,我也将不胜感激。无论如何,我想出的解决方案如下:
IQueryable<Event> events = _db.EventSet.Include("Location").Where(e => (e.EndDate > System.DateTime.Now));
List<Event> eventsList = new List<Event>();
foreach (var ev in events)
{
eventsList.Add(ev);
}
return (IQueryable<Event>)eventsList.AsQueryable().Where(e => e.Artists.Contains(artist)).OrderBy(e=>e.StartDate);
这根本不是一个好的解决方案,因为所有事件都被检索和处理,这是一个巨大的开销。有没有人可以告诉我一个更好的解决方案来解决我的问题?我也知道我并不真正了解 ObjectQuery 是什么以及如何将其转换为 IQueryable (如果可能的话)。
我很感激任何建议。