CRM 2013服务,在端点上使用linq动态查询

时间:2014-08-21 03:55:36

标签: linq linq-to-entities dynamics-crm-2011 dynamics-crm-2013

我在crm端点上使用动态查询时遇到问题。有趣的是,如果我在手工数组上应用相同的linq过滤器,查询将正确执行:

这是正在运行的代码的一部分:

 List<Account> per = new List<Account>();
 per.AsQueryable();
 per.Add(new Account { LogicalName = "account" });
 per.Add(new Account { LogicalName = "account" });
 per.Add(new Account { LogicalName = "account" });
 per.Add(new Account { LogicalName = "account" });
 per.Add(new Account { LogicalName = "account" });
 per[0]["name"] = "Fourth1";
 per[1]["name"] = "Fourth2";
 per[2]["name"] = "Fourth3e";
 per[3]["name"] = "Fourth4e";
 per[4]["name"] = "Fourth5";
 per[0]["address1_postalcode"] = "Fourth1";
 per[1]["address1_postalcode"] = "Fourth2";
 per[2]["address1_postalcode"] = "Fourth3e";
 per[3]["address1_postalcode"] = "Fourth4e";
 per[4]["address1_postalcode"] = "Fourth5";
 fields.Add("Attributes[\"name\"].ToString().Contains(@0)");
 List<object> paramObjects = new List<object>();

 var where = string.Join(" ", fields.ToArray());
 var toParam = keyPosition.ToArray();
 int queryz = per.AsQueryable().Where(where, toParam).ToList().Count;

直到这里一切都很好,过滤器正在工作,我能够基本上做我想做的事。这是给我带来麻烦的部分:

var query_exists = service.CreateQuery("account");
List<Entity> ent = query_exists.ToList();
int c=  ent.AsQueryable().Where(where, toParam).ToList().Count;

使用与top相同的参数我希望相同的查询能够正常工作,但是如果我尝试将它应用于service.CreateQuery(),那么一切都会失败,因为密钥不存在于字典中。 有人知道手工制作的阵列和我从端点转换的阵列之间是否有任何区别?

1 个答案:

答案 0 :(得分:0)

在我的头上非常努力地发现我发现如果数组中的一个属性包含单个空值,则动态linq查询会严重失败。因此,如果要使用此方法,则需要确保数组已完成且所有字段至少都包含空字符串,因为如果要查找的字段为空,则查询将失败。