我试图在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子句的最后一行,我试图检查是否存在链接到accountingdocumententitem的accountingdocumententid的AccountingEntries项。出现错误:
"无法创建类型为'AppName.Domain.Entities.AccountingEntry'的常量值。"在此上下文中只支持基本类型或枚举类型。"
我不明白为什么会发生这种情况,因为我特别选择了这些项目的计数。我还尝试了以下操作,结果相同:
_repo.AccountingEntries.Any(x => x.AccountingDocumentId == adi.AccountingDocumentId)
如有任何意见,不胜感激。
加里。你可以试试
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()