DB内にエンティティとしてキー値のペアの一覧がメタデータとして含まれています。メタデータ内の指定された項目を照合してオブジェクトのリストを返したい。Entity FrameworkでLINQ複合オブジェクト検索を実行できません
すなわちオブジェクトがKeyOne、KeyTwoとKeyThreeのメタデータを持つことができる場合、私はABCの 『とKeyThreeが含まれている『ド「をKeyOneが含まれているすべてのオブジェクトを、私を連れ戻す』と言うことができるようにしたい』
これは私のC#でクエリ
var objects = repository.GetObjects().Where(t =>
request.SearchFilters.All(f =>
t.ObjectChild.Any(tt =>
tt.MetaDataPairs.Any(md =>
md.Key.ToLower() == f.Key.ToLower() && md.Value.ToLower().Contains(f.Value.ToLower())
)
)
)
).ToList();
と、これは
[DataContract]
public class FindObjectRequest
{
[DataMember]
public IDictionary<string, string> SearchFilters { get; set; }
}
そして最後に、私のメタデータPOCO
私の要求クラスです[Table("MetaDataPair")]
public class DbMetaDataPair : IEntityComparable<DbMetaDataPair>
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Required]
public string Key { get; set; }
public string Value { get; set; }
}
私が手にエラーが
エラータイプ 「System.Collections.Generic.KeyValuePair`2 [[可能System.String、mscorlib、 バージョン= 4.0の一定の値を作成することができませんでしたです。 0.0、Culture =ニュートラル、 PublicKeyToken = b77a5c561934e089]、[System.String、mscorlib、 バージョン= 4.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089]] '。 この コンテキストでは、プリミティブ型または列挙型のみがサポートされています。
ここの問題はあなたの投稿のコードにありません。他の場所では、クエリが実行される前に 'KeyValuePair'に変換しています。それを行うコードを見つけて投稿できますか? –
私はそれがC#クエリで見ることができるDictionary "request.SearchFilters"だと思います。私はEFが辞書をIListに変換すると思います。 –
NZJames
あなたは変換していません。あなたは 'Any()'で 'f'を使ってkvpを使用しています。 'f.Key'と' f.Value'をローカル変数に保存してから使用してください。 –