次のような [Flags] 列挙型があります。
[Flags]
public enum Status
{
None = 0,
Active = 1,
Inactive = 2,
Unknown = 4
}
Status 列挙には、次のような 2 つの値が含まれる場合があります。
Status s = Status.Active | Status.Unknown;
ここで、linq クエリ (LINQ to ADO.NET エンティティ) を作成し、ステータスが s 上記のレコード、つまりアクティブまたは不明のレコードを要求する必要があります。
var result = from r in db.Records
select r
where (r.Status & (byte)s) == r.Status
もちろん、LINQ to Entities は Where 句でプリミティブ型を処理することしか認識していないため、エラーが発生します。
エラーは次のとおりです。
タイプ 'Closure type' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
実行可能な方法はありますか?10 個の可能な値を持つステータス Enum があり、5 つのステータスをクエリする場合があります。Flags 列挙型を使用してエレガントな方法でクエリを作成するにはどうすればよいですか?
ありがとう。
アップデート
これは、Linq to Entities の問題のようです。LINQ to SQL で動作すると思います (わからない、テストしていません)。