我遇到了一个问题,用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无法比拟的? 如果我使用包含 ,它不会满足我的要求。
我怎么能解决这个问题?
这个问题与你的子查询来源:
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;
你的“内部”查询选择公司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]'