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

时间:2009-08-05 00:10:51

标签: linq-to-sql

我遇到了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(Id) 他们都是Int32,但我有点困惑,Int32无法比较? 如果我使用包含,则无法满足我的要求。

我怎么能克服这个问题?

2 个答案:

答案 0 :(得分:1)

您的“内部”查询正在选择公司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;

答案 1 :(得分: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;