比较运算符不支持类型“System.Linq.IQueryable`1 [System.Int32]

2019-07-31 09:44发布

我遇到了一个问题,用LTS我的代码如下:

return from p in _db.Companies
where p.Deleted == false &&
(from q in _db.Contacts_Companies
where q.ContactId == contactId && q.Deleted == false
select q.CompanyId).Equals(p.Id)
select p;

我知道这个问题来自于CompanyId.Equals(同上),它们都是的Int32,但我有点困惑是的Int32无法比拟的? 如果我使用包含 ,它不会满足我的要求。

我怎么能解决这个问题?

Answer 1:

这个问题与你的子查询来源:

from q in _db.Contacts_Companies
where q.ContactId == contactId && q.Deleted == false
select q.CompanyId

此不返回int -它返回(如图中的出错消息) IQueryable<int>

也许你赶上了对LINQ的延迟执行语义?

总之,要解决这个问题,你需要从转换IQueryable<int>一个简单的int 。 因为你总是希望只有一个结果,我建议加入.First()

return from p in _db.Companies
where p.Deleted == false &&
(from q in _db.Contacts_Companies
where q.ContactId == contactId && q.Deleted == false
select q.CompanyId).First().Equals(p.Id)
select p;


Answer 2:

你的“内部”查询选择公司ID列表(即使列表中只有一个项目),所以它是不正确的把它比作一个值。

尝试只选择第一项:

return from p in _db.Companies 
       where !p.Deleted && (
           from q in _db.Contacts_Companies 
           where q.ContactId == contactId && !q.Deleted 
           select q.CompanyId).FirstOrDefault() == p.Id
       select p;


文章来源: Comparison operators not supported for type 'System.Linq.IQueryable`1[System.Int32]'
标签: linq-to-sql