4

我要做的是创建一个动态联系人列表。我正在使用 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")
4

1 回答 1

0

Rob Connery 在他的名为Massive的项目中做了非常相似的事情。它可能会做你想做的事,或者给你拼图中缺失的部分。

于 2012-08-10T14:52:04.423 回答