我有这个问题:
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();
答案 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
应解决(未经测试)。