c# - 动态对象,可持久保存到 Azure 并可通过 Dynamic Linq 进行查询

标签 c# linq entity-framework dynamic azure

我想做的是创建一个动态联系人列表。 我使用 Azure SQL 存储来保存我的数据,并使用 EF。

类型化的基类“Contact”具有ID、姓名、电话等属性 和一个“Profile”类,具有 ContactId、PropName、PropVal 等属性,可以存储无限数量的联系人属性(例如性别、地址、年龄等)。

EF Model

现在,这有效了:

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")

最佳答案

Rob Connery 在他的项目 Massive 中做了一些非常类似的事情。 。它可能会准确地完成您想要做的事情,或者为您提供拼图中缺失的部分。

关于c# - 动态对象,可持久保存到 Azure 并可通过 Dynamic Linq 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862998/

相关文章:

C# 和 Java 方法的区别

sql - SQL Server 中多个查找表的索引

linq - 使用 LINQ 获取不同的值

c# - 无法在对象 'dbo.Account' 中插入重复键。重复键值为 (2)

asp.net-mvc - 如何首先在 EF 代码上使用 UnitOfWorkPattern 在 ASP.NET MVC 中实现 Quartz.NET 作业

c# - 使用 SoundPlayer 播放多种声音

c# - 异常 : 'System.InvalidOperationException' in System. Windows.Forms.dll

c# - 为什么我应该使用异步操作而不是同步操作?

c# - linq toentity datediff 单元测试失败,但 sql 数据失败

c# - 如何编写此 Linq to NHibernate 查询