不确定我做错了什么得到错误:无法将类型'System.Linq.IQueryable`1'强制转换为'System.Linq.IQueryable`1'

时间:2011-08-05 08:51:39

标签: c# linq entity-framework linq-to-entities

我有这个问题:

var model2 = (from p in context.ViewChatPeoples
                           where ((IQueryable<int>)(from q in context.ConversationPeoples
                           where !q.Deleted && q.PersonId == info.LoginID
                           select new { q.ConversationId })).Contains(p.ConversationId)
                      select p.ConversationId).Distinct().ToList();
在LINQ / C#中

,但它似乎产生以下错误:

Unable to cast the type 'System.Linq.IQueryable`1' to type 'System.Linq.IQueryable`1'. LINQ to Entities only supports casting Entity Data Model primitive types.

毫无意义,我只想运行一个WHERE IN,但似乎已经遇到了这个障碍,没有任何意义,所以永远不会这样!

感谢

这里的更新是使用给定解决方案的最终工作代码:

var model2 = (from p in context.ViewChatPeoples
                           where ((from q in context.ConversationPeoples
                           where !q.Deleted && q.PersonId == info.LoginID
                           select q.ConversationId)).Contains(p.ConversationId)
                      select p.ConversationId).Distinct().ToList();

2 个答案:

答案 0 :(得分:4)

select new { q.ConversationId }使用属性ConversationId创建一个匿名类型的对象。该代码创建了一个IQueryable&lt; [匿名类型]&gt;而不是IQueryable&lt; INT&GT;

只需select q.ConversationId即可获得IQueryable&lt; INT&GT;

答案 1 :(得分:3)

我认为这是因为子查询的返回类型不是IQueryable<int>而是IQueryable<anonymousType>。将选择从select new { q.ConversationId }更改为select q.ConversationID应解决(未经测试)。