我创建了一个重载的通用 AddChildLink 方法,可以正确处理此问题,以便在查询表达式中正确添加链接。我还添加了一些默认某些参数的重载。
/// <summary>
/// Created do to possible bug (http://stackoverflow.com/questions/10722307/why-does-linkentity-addlink-initialize-the-linkfromentityname-with-its-own-lin)
/// Adds the new LinkEntity as a child to this LinkEnity, rather than this LinkEntity's LinkFrom Entity
/// Assumes that the linkFromAttributeName and the linkToAttributeName are the same
/// </summary>
/// <param name="link"></param>
/// <param name="linkToEntityName"></param>
/// <param name="linkAttributesName"></param>
/// <returns></returns>
public static LinkEntity AddChildLink(this LinkEntity link, string linkToEntityName, string linkAttributesName)
{
return link.AddChildLink(linkToEntityName, linkAttributesName, linkAttributesName);
}
/// <summary>
/// Created do to possible bug (http://stackoverflow.com/questions/10722307/why-does-linkentity-addlink-initialize-the-linkfromentityname-with-its-own-lin)
/// Adds the new LinkEntity as a child to this LinkEnity, rather than this LinkEntity's LinkFrom Entity
/// Assumes that the linkFromAttributeName and the linkToAttributeName are the same
/// </summary>
/// <param name="link"></param>
/// <param name="linkToEntityName"></param>
/// <param name="linkAttributesName"></param>
/// <param name="joinType"></param>
/// <returns></returns>
public static LinkEntity AddChildLink(this LinkEntity link, string linkToEntityName, string linkAttributesName, JoinOperator joinType)
{
return link.AddChildLink(linkToEntityName, linkAttributesName, linkAttributesName, joinType);
}
/// <summary>
/// Created do to possible bug (http://stackoverflow.com/questions/10722307/why-does-linkentity-addlink-initialize-the-linkfromentityname-with-its-own-lin)
/// Adds the new LinkEntity as a child to this LinkEnity, rather than this LinkEntity's LinkFrom Entity
/// </summary>
/// <param name="link"></param>
/// <param name="linkToEntityName"></param>
/// <param name="linkFromAttributeName"></param>
/// <param name="linkToAttributeName"></param>
/// <returns></returns>
public static LinkEntity AddChildLink(this LinkEntity link, string linkToEntityName,
string linkFromAttributeName, string linkToAttributeName)
{
return link.AddChildLink(linkToEntityName, linkFromAttributeName, linkToAttributeName, JoinOperator.Inner);
}
/// <summary>
/// Created do to possible bug (http://stackoverflow.com/questions/10722307/why-does-linkentity-addlink-initialize-the-linkfromentityname-with-its-own-lin)
/// Adds the new LinkEntity as a child to this LinkEnity, rather than this LinkEntity's LinkFrom Entity
/// </summary>
/// <param name="link"></param>
/// <param name="linkToEntityName"></param>
/// <param name="linkFromAttributeName"></param>
/// <param name="linkToAttributeName"></param>
/// <returns></returns>
public static LinkEntity AddChildLink(this LinkEntity link, string linkToEntityName,
string linkFromAttributeName, string linkToAttributeName, JoinOperator joinType)
{
var child = new LinkEntity(
link.LinkToEntityName, linkToEntityName,
linkFromAttributeName, linkToAttributeName, joinType);
link.LinkEntities.Add(child);
return child;
}
public static LinkEntity AddLink(this QueryExpression qe, string linkToEntityName, string linkAttributesName)
{
return qe.AddLink(linkToEntityName, linkAttributesName, linkAttributesName);
}
public static LinkEntity AddLink(this QueryExpression qe, string linkToEntityName, string linkAttributesName, JoinOperator joinType)
{
return qe.AddLink(linkToEntityName, linkAttributesName, linkAttributesName, joinType);
}
这缩短了方法并允许链接:
var qe = new QueryExpression("new_entitya");
qe.AddLink("new_entityb", "new_entitybid").
AddChildLink("new_entityc", "new_entitybid").
LinkCriteria.AddCondition("new_entitycid", ConditionOperator.Equal, id);