私がやろうとしているのは、動的連絡先リストを作成することです。データの永続化に Azure SQL ストレージと EF を使用しています。
型指定された基本クラス「Contact」には、Id、Name、Phone などのprops と、ContactId、PropName、PropVal などの props を持つ「Profile」クラスがあり、連絡先属性 (Sex、Address、Age など) を無制限に保存できます。 .)。
だから今、これはうまくいきます:
var cts = db.Contacts
.Where(p => p.ContactProfile.Any(pr => pr.PropertyName == "Sex" && pr.ValueString == "F")
&& p.ContactProfile.Any(pr => pr.PropertyName == "City" && pr.ValueString == "Kaunas"));
私が達成したいと思っているのは、記述された EF 構造にマップされる動的 POCO クラスを作成し、Linq または (*Dynamic Linq) を使用してこれらの動的プロパティをクエリできるようにすることです。私がなんとか達成したのは、動的クラスのこの「Expando」実装を使用してその動的クラスを作成することです。
だから私はこのようにEFモデルをExpandoにマッピングすることができます
var contact = db.Contacts.First();
dynamic dynContact = new Expando();
dynContact["Sex"] = db.ContactProfiles.First(p => p.Contact.Id == contact.Id && p.PropertyName == "Sex").ValueString;
dynContact.City = db.ContactProfiles.First(p => p.Contact.Id == contact.Id && p.PropertyName == "City").ValueString;
これを機能させる方法がわかりません:(したがって、最初のLinqクエリと同じSQLクエリになります)
DynamicContact.Where(p=>p["Sex"] = "F" && p.City = "NY")