目录
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;
}