我们在C#中使用一个方法来确定构造型的所有元素,但这非常慢:
public List<EA.Element> findElementsByStereotype(string stereotype){
List<EA.Element> result = new List<EA.Element>();
String xmlQueryResult = repository.SQLQuery(
"select obj1.object_id " +
"from t_object obj1 " +
"where obj1.stereotype = '" + stereotype + "';");
XmlDocument xml = Tools.XMLUtil.convertStringToXMLDocument(xmlQueryResult);
XmlNodeList xnList = xml.SelectNodes("/EADATA/Dataset_0/Data/Row");
foreach (XmlNode xn in xnList){
result.Add(repository.GetElementByID(Convert.ToInt32(xn.InnerText)));
}
return result;
}
你知道一个更高效的解决方案吗?
答案 0 :(得分:3)
如果你想快点,XML永远不是你的朋友。幸运的是,EA API提供了一种不同的方法来检索一组元素:Repository.GetElementSet()
,它从逗号分隔的元素ID列表中返回EA.Collection
EA.Element
个,或者从一个SQL查询。
public List<EA.Element> findElementsByStereotype(string stereotype) {
List<EA.Element> result = new List<EA.Element>();
foreach (EA.Element element in repository.GetElementSet("select Object_ID " +
"from t_object where Stereotype='" + stereotype + "'", 2)) {
result.Add(element);
}
return result;
}
请注意,我尚未确认此版本运行速度更快。我假设它会,但GetElementSet()
可能与您正在进行的基本相同的XML解析。但如果没别的话,那就更短了。