【问题标题】:Dynamics QueryExpression - Find entity records where fieldA equals fieldBDynamics QueryExpression - 查找字段等于字段的实体记录
【发布时间】:2016-06-15 13:33:49
【问题描述】:

我正在尝试更改动态 crm 中的一些数据。 为了实现这一点,我想编写一个插件来搜索具有特殊条件的实体。

到目前为止,并没有那么特别。

我可以执行 QueryExpression 并搜索实体 A 的“字段 A”具有“那个值”(例如字符串)的位置

现在不同的是,我要测试“字段 A”是否等于“字段 B”。

在 T-SQL 中是 select * where table1.fielda = table1.fieldb

所以我想将一个实体记录的属性值匹配到同一实体记录的属性值。

我搜索并找到了一种可以在 QueryExpression 中的表上进行连接的方法(API 参考可以在这里找到:https://msdn.microsoft.com/en-us/library/dn481591.aspx),但我不知道如何将它用于我的porpuse,如果它符合我的要求,或者如果它是错误的方式。

那么,有人这样做了吗?

谢谢

----更新----

到目前为止我尝试了什么: 基于@Brendon Colburn 提供的帖子 我尝试构建我的自我加入 LINQ 查询。

不幸的是,构建查询对我试图实现的目标有限制:

您无法在要将字段与另一个字段进行比较的地方构建查询。

示例代码来自: CRM 2011: An unhandled exception of type 'System.InvalidOperationException' occurred. referenced from scope '', but it is not defined

(from cl in context.CreateQuery<ContractDetail>()
join a in context.CreateQuery<Account>()
on cl.CustomerId.Id equals a.AccountId
where cl.StateCode.Value == 0
where cl.new_SupportedBy == a.Name
select cl).ToList();

抛出错误 ConsoleApplication1.exe 中发生了“System.InvalidOperationException”类型的未处理异常

更多信息可以在帖子中找到 CRM 2011: An unhandled exception of type 'System.InvalidOperationException' occurred. referenced from scope '', but it is not defined

所以,最终似乎无法以好看的方式归档它。

看来我最终将搜索我想要查看的所有实体记录,并根据我在 for - each 循环中确定的条件查找记录。 :(((

【问题讨论】:

    标签: c# dynamics-crm microsoft-dynamics


    【解决方案1】:

    在 Dynamics CRM Linq 查询建立在 QueryExpression 之上,因此继承了它的限制。在QueryExpression 中,过滤是使用ConditionExpression 对象完成的。 ConditionExpression 总是有两个或三个参数:

    1. 属性名称(左侧)
    2. 操作员
    3. (可选)一个或多个文字值

    一个值不能用属性名来识别。

    因此,当您无法通过连接获得所需的结果时,您唯一的选择是查询比实际需要更多的记录,然后过滤它们。

    在以完全信任(仅限 On Premise)模式执行的插件中,实际上可以直接访问 CRM 数据库并执行 SQL 查询,但这有点小技巧。

    【讨论】:

      【解决方案2】:

      老实说,我只是觉得你做错了什么。您在 Stack Overflow 其他地方提供的示例不是自联接。也许你想要做的也不是一个。如果您要提供不起作用的查询,那将是有见地的。你所说的限制对我来说听起来并不准确。

      我相信您所描述的是自加入?我认为如果你用这个 LINQ 查询完成同样的事情可能会更容易:

      using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
       {
        var query_join5 = from a in svcContext.AccountSet
                          join a2 in svcContext.AccountSet
                          on a.ParentAccountId.Id equals a2.AccountId
      
                          select new
                          {
                           account_name = a.Name,
                           account_city = a.Address1_City
                          };
        foreach (var c in query_join5)
        {
         System.Console.WriteLine(c.account_name + "  " + c.account_city);
        }
       }
      

      当然是替换字段和实体名称。在此处检查这些操作的 msdn:https://msdn.microsoft.com/en-us/library/gg334593.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多