这是我的情况:
我得到了艺术家和事件之间的m: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 (如果可能的话)。
非常感谢您的任何建议。
发布于 2010-11-17 01:17:00
您可以使用带有艺术家ID字段的Any,此处假定名称为ArtistId
_db.EventSet.Include("Location")
.Where(e => (e.Artists.Any(a => a.ArtistId == artist.ArtistId)) && (e.StartDate > System.DateTime.Now))
.OrderBy(e => e.StartDate);https://stackoverflow.com/questions/4196068
复制相似问题