自由链接
- 2020年10月29日
- 2分钟阅读
使用XPO,您可以使用自由连接基于不直接相关(没有显式定义的关联)的持久对象建立条件。本质上,XPO允许您连接条件上的任何持久对象,使用它们的属性针对匹配对象计算聚合函数,并返回聚合值作为连接的结果。为此,请在您的条件中使用JoinOperand。
用于创建JoinOperand的选项包括:
-
方法的条件字符串参数的一般格式为:[< JoinTypeName >] [ JoinCondition ]
在这里,JoinTypeName表示JoinOperand.JoinTypeName属性值,而JoinCondition是与条件相等的CriteriaOperator的字符串表示形式。
要在连接条件内指示父对象的属性,请在它们前面加上一个脱字符号和点(’ ^。 '),如下所示:
[< JoinTypeName >] [[^。ParentObjectProperty ] = [ JoinedObjectProperty ]]
以下代码段演示了如何检索关闭了50个以上订单的员工。
CriteriaOperator criteria = CriteriaOperator.Parse("[<Orders>][^.EmployeeID = EmployeeID].Count() > 50"); XPCollection<Employee> employees = new XPCollection<Employee>(session, criteria);
-
该JoinOperand构造。
您可以使用特定的构造函数来创建JoinOperand,并通过相应的构造函数参数使用join和聚合设置对其进行初始化。
CriteriaOperator joinCriteria = new OperandProperty("^.EmployeeID") == new OperandProperty("EmployeeID"); JoinOperand joinOperand = new JoinOperand("Orders", joinCriteria, Aggregate.Count, new OperandProperty("EmployeeID")); BinaryOperator criteria = new BinaryOperator(joinOperand, new OperandValue(50), BinaryOperatorType.Greater); XPCollection<Employee> employees = new XPCollection<Employee>(session, criteria);
-
LINQ to XPO中的Join操作。
语法与LINQ中的组联接(JoinGroup方法)的语法相同。
XPQuery<Employee> employees = new XPQuery<Employee>(session); XPQuery<Orders> orders = new XPQuery<Orders>(session); var list = from e in employees join o in orders on e.EmployeeID equals o.EmployeeID.EmployeeID into query where query.Count() > 50 select e ;