dynamics365 QueryExpression、FilterExpression、ConditionExpression、OrderExpression、PagingInfo等类库基本信息用法

这篇博客详细介绍了CRM系统中QueryExpression类库的使用,包括其属性如EntityName、ColumnSet、Criteria等,以及FilterExpression、ConditionExpression、OrderExpression、PagingInfo和LinkEntity等子类的属性和用法。文章通过实例展示了如何创建和操作查询表达式以实现特定的查询条件、排序、分页和链接实体,帮助开发者更有效地查询和管理CRM数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QueryExpression类库的属性【查询】

声明QueryExpression添加它的基本属性,调用组织服务的RetrieveMultiple方法进行查询

属性名作用读法
EntityName指定将检索哪种类型的实体。 一个查询表达式仅检索一个实体类型集合。
ColumnSet指定要检索的属性(列)的集合。
Criteria指定复杂条件和逻辑筛选器表达式,用于筛选查询结果。
Distinct指定查询的结果是否包含重复记录。
LinkEntities指定多个实体类型之间的链接。
Orders指定从查询返回的记录的顺序。
PageInfo指定从查询返回的页数和每页中的记录数量。

FilterExpression类库的属性【条件】

给QueryExpression的Criteria属性赋值,作用是添加过滤条件

属性名作用读法
Conditions获取或设置包括属性、条件运算符和属性值的条件表达式。
FilterOperator获取或设置逻辑 AND/OR 筛选器运算符。 它是使用 LogicalOperator 枚举设置的。
Filters获取或设置用于筛选查询结果的条件和逻辑筛选器表达式的层次结构。
IsQuickFindFilter获取或设置指示表达式是否为"快速查找"查询一部分的值。

关于 IsQuickFindFilter 属性

  • 可以使用FilterExpression.IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter 属性,该属性与存在于 Fetch XML 中的 filter 节点上的 isquickfindfields 特性类似。 保存 Fetch 查询后,它将存储在 SavedQuery 和 UserQuery 实体的 IsQuickFind 属性中。 添加 IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter 属性的目的是为了在查询表达式和 Fetch XML 查询之间提供一致性。
  • 对于逻辑运算符类型为 LogicalOperator.Or 的筛选器表达式,此字段只能设置为 true。 如果针对逻辑运算符类型为 LogicalOperator.And 的表达式设置了它,则将忽略 IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter 属性。
  • 一个筛选器表达式层次结构中仅有一个筛选器表达式可设置为 IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter = true。 如果发现多个,则将引发异常。
  • 如果筛选器表达式的 IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter 设置为 true,则不能包含任何子筛选器表达式属性,只能包含ConditionExpression属性。 如果添加子筛选器表达式,则将引发异常。
  • 与 IsQuickFindFilterIsQuickFindFilterIsQuickFindFilterIsQuickFindFilter 设置为 true 的筛选器表达式相关的所有条件表达式必须是单个非 null 值条件。 换言之,假定条件由属性、运算符和值组成,则仅支持其中值属性不是为 null的单个值的条件。 此外,这些条件表达式上支持的唯一条件运算符是与不为 null 的单个值一起使用的运算符。 如果检测到一个 null值或多个值,将引发异常。

ConditionExpression类库的属性【具体条件】

给FilterExpression的AddCondition方法赋值添加多个查询条件

属性名作用读法
AttributeName指定条件表达式中属性的逻辑名称。
Operator指定条件运算符。 它是使用 ConditionOperator 枚举设置的。
Values指定属性的值。

ConditionOperator 枚举说明

OrderExpression类库的属性【排序】

属性名作用读法
AttributeName指定条件表达式中属性的逻辑名称。
OrderType指定排序规则。通过OrderType枚举来设置Ascending = 0, Descending = 1

PagingInfo类库的属性【分页信息】

添加给QueryExpression的PageInfo属性,来配置分页信息

属性名作用读法
ReturnTotalRecordCount是否返回全部数据总行数。
PageNumber页数
Count条数

LinkEntity类库的属性【链表】

QueryExpression的LinkEntities属性,添加链表信息

属性名作用读法
linkToEntityName链接的表。
linkFromAttributeName链接属性来源
linkToAttributeName链接属性到
LinkCriteria链接表的条件
Orders链接表的顺序
LinkEntities链接表的连接表
JoinOperator链接方式,来自JoinOperator枚举

案例

		public DataCollection<Entity> GetEntityDataByColumnValue(string entityName, string columnName, object columnValue, string[] selectColumns, bool queryActive = false)
		{

			FilterExpression val = (FilterExpression)(object)new FilterExpression();
			ConditionExpression val2 = (ConditionExpression)(object)new ConditionExpression();
			val2.AttributeName=columnName;
			if (columnValue != null)
			{
				val2.Operator=ConditionOperator.Equal;
				val2.Values.Add(columnValue);
			}
			else
			{
				val2.Operator=ConditionOperator.Null;
			}
			if (queryActive)
			{
				ConditionExpression val3 = new ConditionExpression();
				val3.AttributeName="statecode";
				val3.Operator=ConditionOperator.Equal;
			    val3.Values.Add(0);
				val.AddCondition(val3);
			}
			val.AddCondition(val2);
			QueryExpression val4 = new QueryExpression();
			val4.EntityName=entityName;
			val4.ColumnSet=new ColumnSet(selectColumns);
			QueryExpression val5 = (QueryExpression)(object)val4;
			val5.Criteria=val;
			return service.RetrieveMultiple((QueryBase)(object)val5).Entities;
		}

		public DataCollection<Entity> GetEntityDataByCondition(string entityName, string[] selectColumns, ConditionExpression[] conExpressions, OrderExpression orderExp)
		{
			QueryExpression val = new QueryExpression();
			val.EntityName=entityName;
			val.ColumnSet=new ColumnSet(selectColumns);
			QueryExpression val2 = val;
			FilterExpression val3 = new FilterExpression();
			if (conExpressions != null)
			{
				foreach (ConditionExpression val4 in conExpressions)
				{
					val3.AddCondition(val4);
				}
			}
			val2.Criteria=val3;
			if (orderExp != null)
			{
				val2.Orders.Add(orderExp);
			}

			val2.PageInfo.ReturnTotalRecordCount = true;
			return service.RetrieveMultiple((QueryBase)(object)val2).Entities;
		}

		public DataCollection<Entity> GetEntityDataByCondition(string entityName, string[] selectColumns, ConditionExpression[] conExpressions, OrderExpression orderExp, int topCount)
		{

			QueryExpression val = new QueryExpression();
			val.EntityName=entityName;
			val.ColumnSet=new ColumnSet(selectColumns);
			QueryExpression val2 = val;
			val2.PageInfo.ReturnTotalRecordCount=true;
			val2.PageInfo.PageNumber=1;
			val2.PageInfo.Count=topCount;
			FilterExpression val3 = new FilterExpression();
			if (conExpressions != null)
			{
				foreach (ConditionExpression val4 in conExpressions)
				{
					val3.AddCondition(val4);
				}
			}
			val2.Criteria=val3;
			if (orderExp != null)
			{
				val2.Orders.Add(orderExp);
			}
			return service.RetrieveMultiple((QueryBase)(object)val2).Entities;
		}

		public DataCollection<Entity> GetEntityDataByCondition(string entityName, string[] selectColumns, ConditionExpression[] conExpressions, List<LinkEntity> lkEnts)
		{

			FilterExpression val = (FilterExpression)(object)new FilterExpression();
			if (conExpressions != null)
			{
				foreach (ConditionExpression val2 in conExpressions)
				{
					val.AddCondition(val2);
				}
			}
			QueryExpression val3 = new QueryExpression();
			val3.EntityName=entityName;
			val3.ColumnSet=new ColumnSet(selectColumns);
			QueryExpression val4 = val3;
			if (lkEnts != null)
			{
				foreach (LinkEntity lkEnt in lkEnts)
				{
					val4.LinkEntities.Add(lkEnt);
				}
			}
			val4.Criteria=val;
			return service.RetrieveMultiple((QueryBase)(object)val4).Entities;
		}

		public QueryExpression GetQueryExpressionByCondition(string entityName, string[] selectColumns, ConditionExpression[] conExpressions, OrderExpression orderExp)
		{

			QueryExpression val = null;
			if (selectColumns != null)
			{
				QueryExpression val2 = new QueryExpression();
				val2.EntityName=entityName;
				val2.ColumnSet=((ColumnSet)(object)new ColumnSet(selectColumns));
				val = (QueryExpression)(object)val2;
			}
			else
			{
				QueryExpression val3 = new QueryExpression();
				val3.EntityName=entityName;
				val3.ColumnSet=((ColumnSet)(object)new ColumnSet(true));
				val = (QueryExpression)(object)val3;
			}
			FilterExpression val4 = (FilterExpression)(object)new FilterExpression();
			if (conExpressions != null)
			{
				foreach (ConditionExpression val5 in conExpressions)
				{
					val4.AddCondition(val5);
				}
			}
			val.Criteria=val4;
			if (orderExp != null)
			{
				((Collection<OrderExpression>)(object)val.Orders).Add(orderExp);
			}

			val.PageInfo.ReturnTotalRecordCount = true;
			return val;
		}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值