2

私はモデルバージョンを持っています。これには、ドキュメントの 1 つの一意のバージョンを含む情報が格納されます。

私のビューモデルでは、次のように設定しました:

public virtual ICollection<IPACS_Version> rejectionList { get; set; }

これで、バージョン ドキュメントのコレクションを取得できるようになりました。

ここにLINQがあります:

model.rejectionList = (from v in db.IPACS_Version
                        join d in db.IPACS_Document
                        on v.documentID equals d.documentID
                        where v.dateRejected != null && (d.createdBy == currUser || d.requester == currUser)
                        select v);

これにより、次のエラーが発生します。

タイプ 'System.Linq.IQueryable' を 'System.Collections.Generic.ICollection' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

この行は、0 から多くの「バージョン」まで返すことができます。私が正しく理解していないと思うのは、クエリが 0 から多くのバージョンを返すため、この LINQ クエリがバージョン モデルに適合しないのはなぜですか?

4

3 に答える 3

2

LINQ クエリは を返しますがIQueryable<T>、型であることが要求されますICollection<T>。これら 2 つのインターフェイスは非常に異なるため、これらを 1 つの性質にまとめる必要があります。IQueryable<T>技術的に言えば、メンバーの追加と削除を可能にする、ある種のメモリ内データ シーケンスに具体化する必要があります(ICollection インターフェイスの抽象化の性質)。

簡単な解決策はToList、クエリの最後に追加することです

model.rejectionList = (from v in db.IPACS_Version
                        join d in db.IPACS_Document
                        on v.documentID equals d.documentID
                        where v.dateRejected != null && (d.createdBy == currUser || d.requester == currUser)
                        select v).ToList();

IListは を実装しているためICollection<T>、これは正常に機能するはずです。

于 2013-09-10T20:27:55.473 に答える
1

プロパティを次のように定義しますIEnumerable<T>

public virtual IEnumerable<IPACS_Version> rejectionList { get; set; }
于 2013-09-10T20:27:32.853 に答える
1

IEnummerable<T>View Model をではなく使用するように変更できない場合、問題を解決する最も簡単な方法は、最後のクエリICollection<T>を呼び出すことです。実装します。ToListList<T>ICollection<T>

于 2013-09-10T20:27:46.753 に答える