1

私は EF 5 を使用しています。私のエンティティには、MyEntityStatus 型の列挙型である Status というプロパティがあります。

ステータスのリストのいずれかを持つすべてのエンティティを返すクエリを実行する必要があります。

私の基本的なコードは次のとおりです。

var statusArray = new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2};
var results = myDataContext.MyEntities..Where(e => statusArray.Contains(e.Status)).ToArray();

コードはコンパイルされますが、EF は次のエラーを返します。

The type 'MyEntityStatus' does not match the EDM enumeration type 'MyEntityStatus' or its underlying type 'Byte'.

明示的な列挙型ではなくバイト配列を使用しようとすると、次のエラーが発生します。

DbExpressionBinding requires an input expression with a collection ResultType.

何か案は?

4

1 に答える 1

1

Any() から Contains() に切り替えると、そこにたどり着きましたが、最終的な解決策では、バイト [] ではなくリストを使用する必要がありました。

動作する最終的なコードは次のとおりです。

var statusArray = (new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2}).Cast<byte>().ToList();
var results = myDataContext.MyEntities..Where(e => statusArray.Contains((byte)e.Status)).ToArray();

どうやら、EF は List を byte[] とは異なる方法で扱います。

参照: .NET Entity Framework - .Contains() を使用して Where 式でバイト値を検索する

于 2013-06-12T17:53:59.997 に答える