实体框架检查集合是否包含Item



我试图在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()

相关内容

  • 没有找到相关文章

最新更新