首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ObjectQuery中使用Contains

在ObjectQuery中使用Contains
EN

Stack Overflow用户
提问于 2010-11-16 23:55:45
回答 1查看 1.4K关注 0票数 3

这是我的情况:

我得到了艺术家和事件之间的m:n关系。我想要做的是得到一个只包含某个艺术家的事件的IQueryable。我正在为我的数据访问层使用存储库。显然,以下方法不起作用:

代码语言:javascript
复制
_db.EventSet.Include("Location").Where(e => (e.Artists.Contains(artist)) && (e.StartDate > System.DateTime.Now)).OrderBy(e => e.StartDate);

由于我是实体框架的新手,我真的不明白为什么,但我可以猜到。因此,如果有人能以一种非常简单的方式解释这一点,我也将不胜感激。无论如何,我想出的解决方案如下所示:

代码语言:javascript
复制
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 (如果可能的话)。

非常感谢您的任何建议。

EN

回答 1

Stack Overflow用户

发布于 2010-11-17 01:17:00

您可以使用带有艺术家ID字段的Any,此处假定名称为ArtistId

代码语言:javascript
复制
_db.EventSet.Include("Location")
            .Where(e => (e.Artists.Any(a => a.ArtistId == artist.ArtistId)) && (e.StartDate > System.DateTime.Now))
            .OrderBy(e => e.StartDate);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4196068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档