0

我正在尝试在 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)

任何投入将不胜感激。

加里。

4

1 回答 1

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()
于 2013-05-16T12:02:16.307 回答