本文整理汇总了C#中IExpressionNode.GetIVertex方法的典型用法代码示例。如果您正苦于以下问题:C# IExpressionNode.GetIVertex方法的具体用法?C# IExpressionNode.GetIVertex怎么用?C# IExpressionNode.GetIVertex使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IExpressionNode
的用法示例。
在下文中一共展示了IExpressionNode.GetIVertex方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateLowerLevels
private void UpdateLowerLevels(IExpressionNode myNode, LevelKey myCurrentLevelKey, IEnumerable<LevelKey> myLowerLevelKeys, IExpressionGraph myGraph)
{
if (myCurrentLevelKey.Level > 0)
{
lock (myGraph)
{
//iterate the next lower LevelKeys
foreach (var aLowerLevelKey in myLowerLevelKeys)
{
#region data
//get next lower attribute (might be more than one step away)
int levelDistance = myCurrentLevelKey.Level - aLowerLevelKey.Level;
//VertexType currentType = null;
EdgeKey myCurrentBackwardEdgekey = null;
IAttributeDefinition currentAttribute = null;
#endregion
if (levelDistance >= 1)
{
if (myCurrentLevelKey.Level > 1)
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[myCurrentLevelKey.Level - 1];
}
else
{
myCurrentBackwardEdgekey = myCurrentLevelKey.Edges[0];
}
}
else
{
throw new ExpressionGraphInternalException("Distances below 1 are not valid.");
}
IEnumerable<IVertex> referencedUUIDs = null;
IVertexType tempVertexType = _iGraphDB.GetVertexType<IVertexType>(
_securityToken,
_transactionToken,
new RequestGetVertexType(myCurrentBackwardEdgekey.VertexTypeID),
(stats, vertexType) => vertexType);
currentAttribute = tempVertexType.GetAttributeDefinition(myCurrentBackwardEdgekey.AttributeID);
if (currentAttribute.Kind == AttributeType.IncomingEdge)
{
var incomingAttribite = (IIncomingEdgeDefinition)currentAttribute;
var IVertex = myNode.GetIVertex();
if (IVertex.HasOutgoingEdge(incomingAttribite.RelatedEdgeDefinition.ID))
{
referencedUUIDs = IVertex.GetOutgoingEdge(incomingAttribite.RelatedEdgeDefinition.ID).GetTargetVertices();
}
}
else
{
var outgoingAttribute = (IOutgoingEdgeDefinition)currentAttribute;
if (myNode.BackwardEdges.ContainsKey(aLowerLevelKey.LastEdge))
{
//take the edges that are already available
List<IVertex> tempVertices = new List<IVertex>();
foreach (var aVertexInformation in myNode.BackwardEdges[aLowerLevelKey.LastEdge].Select(item => item.Destination))
{
tempVertices.Add(_iGraphDB.GetVertex<IVertex>(
_securityToken,
_transactionToken,
new RequestGetVertex(aVertexInformation.VertexTypeID, aVertexInformation.VertexID),
(stats, vertices) => vertices));
}
referencedUUIDs = tempVertices;
}
else
{
var aVertex = myNode.GetIVertex();
if (aVertex.HasIncomingVertices(myCurrentBackwardEdgekey.VertexTypeID, myCurrentBackwardEdgekey.AttributeID))
{
referencedUUIDs = aVertex.GetIncomingVertices(myCurrentBackwardEdgekey.VertexTypeID, myCurrentBackwardEdgekey.AttributeID);
}
}
}
if (referencedUUIDs != null)
{
var lowerLevelKeys = ExtractLowerLevelKeys(GetPreviousLevel(aLowerLevelKey.Level, myGraph.Levels), aLowerLevelKey, myGraph);
EdgeKey edgeKeyForBackwardEdge = null;
//get edgeKey for backwardEdge
if (myCurrentLevelKey.Level == 1)
{
edgeKeyForBackwardEdge = aLowerLevelKey.LastEdge;
}
else
{
edgeKeyForBackwardEdge = aLowerLevelKey.Edges[aLowerLevelKey.Level - 1];
//.........这里部分代码省略.........
示例2: AddNode
public void AddNode(LevelKey levelKey, IExpressionNode expressionNode)
{
lock (_Content)
{
if (_Content.ContainsKey(levelKey))
{
var tempInt64 = expressionNode.GetIVertex().VertexID;
var node = expressionNode.VertexInformation;
if (_Content[levelKey].Nodes.ContainsKey(node))
{
//the node already exist, so update its edges
foreach (var aBackwardEdge in expressionNode.BackwardEdges)
{
_Content[levelKey].Nodes[node].AddBackwardEdges(aBackwardEdge.Value);
}
foreach (var aForwardsEdge in expressionNode.ForwardEdges)
{
_Content[levelKey].Nodes[node].AddForwardEdges(aForwardsEdge.Value);
}
}
else
{
_Content[levelKey].Nodes.Add(node, expressionNode);
}
}
else
{
_Content.Add(levelKey, new ExpressionLevelEntry(levelKey));
_Content[levelKey].Nodes.Add(expressionNode.VertexInformation, expressionNode);
}
}
}