我试图在一个简单的查询中使用Contains(),但它失败了,错误:
无法创建"NewsletterApp.Models.NewsletterUser"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').
编辑intellisense实际上指示我使用Contains()中的NewsletterUser - '(NewsletterUser item)'
我读到使用EF和.NET 3.5使用Contains()搜索对象时出现问题,但我在.NET 4.0中使用EF4.2(也尝试过4.1).代码如下:
var db = new MyContext();
var newsletterUser = db.NewsletterUsers.Find(UserID);
var subscriberList = db.Subscribers
.Where(x => x.NewsletterList.ListOwner.NewsletterUsers.Contains(newsletterUser))
.ToList();
Run Code Online (Sandbox Code Playgroud)
我怀疑你想要这个
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();
Run Code Online (Sandbox Code Playgroud)
Any()检查是否存在满足lambda中指定条件的项:"y => y.UserId == newsletterUser.UserId".
您获得的异常:"在此上下文中仅支持原始类型(例如Int32,String和Guid')"是由于LINQ to Entities设置的限制.LINQ to Entities需要以它可以表达给数据库的方式来解析您的查询,并且它不能使用包含原始类型之外的任何东西的Contains()方法.
问题是,如果你针对内存集合(LINQ to Objects)运行它,你发布的代码运行正常 - 这就是它没有被编译器标记的原因.
归档时间: |
|
查看次数: |
6240 次 |
最近记录: |