3
这是我的情况:在ObjectQuery中使用Contains
我有一个艺术家和事件之间的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-16 18:28:01
@Saeed,为什么不你认为它有效吗?当然,我不知道OP数据库的确切架构,但是我设置了事件,艺术家和位置的数据库,对其进行了测试,并且工作正常。 – 2010-11-16 18:38:37
我认为''(e.Artists.Any(a => a.ArtistId == artist.ArtistId)''无法处理,因为您没有提取的数据来搜索它,只是猜测,它是'EF'如果是AsEnumerable()而没有像我说的那样执行不同的执行,但是在这种情况下,我认为它不能产生sql查询 – 2010-11-16 18:58:31