You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics 365中如何比较关联实体的列值?

解决Dynamics 365 QueryExpression关联实体列值比较的问题

原代码的核心错误是:直接将关联实体的列名"entity1.userid"作为比较值传入AddCondition,Dynamics 365会把它当成字符串常量而非列引用,无法实现列与列的比较。以下是正确的实现方式:

正确代码示例

方法一:使用ConditionExpression配置列比较

var query1 = new QueryExpression("entity1");
query1.ColumnSet.AddColumns("userid");  

// 添加关联实体链接
var link1 = query1.AddLink("entity2", "entity2id", "entity2Id", JoinOperator.Inner);

// 创建列比较条件
var columnCompareCondition = new ConditionExpression("ownerId", ConditionOperator.NotEqual);
columnCompareCondition.CompareColumns = true; // 标记为列与列的比较
columnCompareCondition.RightOperand = "entity1.userid"; // 指定要比较的主实体列

link1.LinkCriteria.Conditions.Add(columnCompareCondition);

方法二:使用实体别名+FilterExpression(兼容旧版本)

var query1 = new QueryExpression("entity1");
query1.ColumnSet.AddColumns("userid");  
query1.EntityAlias = "e1"; // 给主实体设置别名

// 添加关联实体并设置别名
var link1 = query1.AddLink("entity2", "entity2id", "entity2Id", JoinOperator.Inner);
link1.EntityAlias = "e2";

// 创建过滤器并配置列比较
var columnFilter = new FilterExpression();
columnFilter.AddCondition("e2.ownerId", ConditionOperator.NotEqual, "e1.userid");
columnFilter.CompareColumns = true; // 关键:启用列比较模式

link1.LinkCriteria.Filters.Add(columnFilter);

关键注意点

  • 必须设置CompareColumns = true,明确告诉系统这是列与列的比较,而非列与固定值的匹配。
  • 如果使用实体别名,主实体和关联实体都需要通过EntityAlias属性设置别名,后续用"别名.列名"的格式引用列,逻辑更清晰。
  • 原代码中AddCondition的最后一个参数是用于固定值匹配的,不能直接传入列名,这是导致问题的核心原因。

内容的提问来源于stack exchange,提问作者Andrey Bushman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:46:03