我正在尝试在EF5中执行以下查询:
var data = from adi in _repo.AccountingDocumentItems
from e in adi.Employees
let c = adi.Employees.Count()
where
(adi.AccountingDocument.DocumentDate >= start && adi.AccountingDocument.DocumentDate <= queryEnd) &&
(c > 0) &&
(_repo.AccountingEntries.Count(p => p.AccountingDocumentId == adi.AccountingDocumentId) != 0))
破坏的部分是where子句的最后一行,我尝试检查是否存在与AccountingDocumentItem的AccountingDocumentId链接的AccountingEntries项。我收到一个错误:
“无法创建类型'AppName.Domain.Entities.AccountingEntry'的常量值。在此上下文中仅支持基本类型或枚举类型。”
我不明白为什么会这样,因为我特意选择了那些项目的计数。我也尝试了以下相同的结果:
_repo.AccountingEntries.Any(x => x.AccountingDocumentId == adi.AccountingDocumentId)
非常感谢任何输入。
加里。
答案 0 :(得分:0)
你可以尝试
var accountingEntriesId = _repo.AccountingEntries.Select(m => m.AccountingDocumentId);
var data = from adi in _repo.AccountingDocumentItems
where
adi.AccountingDocument.DocumentDate >= start &&
adi.AccountingDocument.DocumentDate <= queryEnd &&
adi.Employees.Any() &&
accountingEntriesId.Contains(adi.AccountingDocumentId)
修改强>
您还可以使用inner join
:如果AccountingEntries中不存在该元素,则不会检索任何内容,这是(如果我没有错)您想要的内容。
var data = from adi in _repo.AccounginDocumentItems
join ae in _rep.AccountingEntries on adi.AccountingDocumentId equals ae.AccountingDocumentId
where
adi.AccountingDocument.DocumentDate >= start &&
adi.AccountingDocument.DocumentDate <= queryEnd &&
adi.Employees.Any()