我要做的是创建一个动态联系人列表。我正在使用 Azure SQL 存储来保存我的数据和 EF。
类型化的基类“Contact”拥有 Id、Name、Phone 等道具和“Profile”类,该类具有 ContactId、PropName、PropVal 等道具,可以存储无限数量的联系人属性(如性别、地址、年龄等。 .)。
所以现在,这有效:
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"));
我希望实现的是创建一个动态 POCO 类,该类将映射到所描述的 EF 结构,并启用使用 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")