我遇到了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无法比较? 如果我使用包含,则无法满足我的要求。
我怎么能克服这个问题?
答案 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;