Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态对象,可持久化到Azure并可由动态Linq查询_C#_Linq_Entity Framework_Dynamic_Azure - Fatal编程技术网

C# 动态对象,可持久化到Azure并可由动态Linq查询

C# 动态对象,可持久化到Azure并可由动态Linq查询,c#,linq,entity-framework,dynamic,azure,C#,Linq,Entity Framework,Dynamic,Azure,我想做的是创建一个动态联系人列表。 我正在使用Azure SQL存储来持久化我的数据,以及EF 键入的基类“Contact”包含Id、姓名、电话等道具 以及一个“Profile”类,,该类具有ContactId、PropName、PropVal等道具,可存储无限数量的联系人属性(如性别、地址、年龄等) 所以现在,这是可行的: var cts = db.Contacts .Where(p => p.ContactProfile.Any(pr => pr.Pro

我想做的是创建一个动态联系人列表。 我正在使用Azure SQL存储来持久化我的数据,以及EF

键入的基类“Contact”包含Id、姓名、电话等道具 以及一个“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)查询这些动态属性。 我设法实现的是使用动态类的“”实现创建该动态类

所以我可以像这样把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查询)


罗布·康纳利在他的名为。它可能正是你想要做的,或者给你拼图中缺失的部分。

我怀疑你最终想要的是这样的var cts=db.Contacts.Where(p=>p.Sex==“F”)&p.City==“Kaunas”);这将是一个非常容易实现的问题,需要构建一个LINQ提供程序并转换为正确的底层SQL。此链接可能会有所帮助。是的,我几乎得出了相同的结论,一个查询提供者就是答案。这将拦截查询,并根据需要对其进行转换。我认为LINQtoEntities基本上做了同样的事情。到目前为止,我们倾向于一种“动态SQL proc”解决方案,它基于传入的一些参数值在内部构建查询。CTE查询似乎比现有查询效率更高,在这种情况下,性能是一个因素。。太糟糕了,EF的LINQ不支持CTE查询:(这似乎是另一种情况下可能的解决方案。
DynamicContact.Where(p=>p["Sex"] = "F" && p.City = "NY")