Entity framework LINQ to实体包含查询
我试图在简单查询中使用Contains(),但失败,错误如下: 无法创建类型为“newsletteApp.Models.newsletteUser”的常量值。在此上下文中仅支持基本类型(“如Int32、String和Guid”) 编辑intellisense实际上指示我在Contains()中使用新闻稿用户-(新闻稿用户项) 我了解到在.NET 3.5中使用EF搜索Contains()对象时出现问题,但我在.NET 4.0中使用EF4.2(也尝试了4.1)。 代码如下:Entity framework LINQ to实体包含查询,entity-framework,Entity Framework,我试图在简单查询中使用Contains(),但失败,错误如下: 无法创建类型为“newsletteApp.Models.newsletteUser”的常量值。在此上下文中仅支持基本类型(“如Int32、String和Guid”) 编辑intellisense实际上指示我在Contains()中使用新闻稿用户-(新闻稿用户项) 我了解到在.NET 3.5中使用EF搜索Contains()对象时出现问题,但我在.NET 4.0中使用EF4.2(也尝试了4.1)。 代码如下: var
var db = new MyContext();
var newsletterUser = db.NewsletterUsers.Find(UserID);
var subscriberList = db.Subscribers
.Where(x => x.NewsletterList.ListOwner.NewsletterUsers.Contains(newsletterUser))
.ToList();
你的问题是错误的。您不是在比较属性或字段,而是在比较整个对象或实体,这不能用这种方式完成 尝试下面的代码,它将工作
var db = new MyContext();
var newsletterUser = db.NewsletterUsers.Find(UserID);
var subscriberList = db.Subscribers
.Where(x => x.NewsletterList.ListOwner.NewsletterUsers.UserId.Contains(newsletterUser.UserID))
.ToList();
我怀疑你想要这个
var db = new MyContext();
var newsletterUser = db.NewsletterUsers.Find(UserID);
var subscriberList = db.Subscribers
.Where(x => x.NewsletterList.ListOwner.NewsletterUsers
.Any(y => y.UserId == newsletterUser.UserId))
.ToList();
Any()检查是否存在满足lambda中指定条件的项:“y=>y.UserId==newsletteUser.UserId”
您得到的异常:“在此上下文中仅支持基本类型('如Int32、String和Guid')”是由于LINQ对实体设置的限制。LINQtoEntities需要以一种可以表达到数据库的方式解析查询,而它不能用包含()方法来解析原始类型以外的任何内容
问题是,如果您针对内存中的集合(LINQ to Objects)运行您发布的代码,那么它确实可以正常运行—这就是为什么编译器不会标记它。NewsleterUsers是一个IEnumerable,因此代码无法工作。intellisense实际指示我使用对象(用户项)“。我对您的上下文了解不多,因此无法准确地编写查询……您能否详细说明您想要什么,并为时事通讯和订阅者显示实体类……您的查询不起作用的主要原因是您正在比较对象,而不是属性或字段……请这样想,你能比较一下1班和2班吗。。。。