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))

破損している部分は、AccountingDocumentItem の AccountingDocumentId にリンクされている AccountingEntries 項目が存在するかどうかを確認しようとする where 句の最後の行です。エラーが発生します:

「型 '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 に答える