2010-09-08 62 views
0

我有一个非常简单的XML:Linq to XML,查找元素的最快方法?

<Rows> 
    <Row> 
    <id>1</id> 
    <name>foo</name> 
    <more>xyz</more> 
    </Row> 
    <Row> 
    <id>2</id> 
    <name>bar</name> 
    <more>abc</more> 
    </Row> 
</Rows> 

,需要做大量的查询上的标识,速度是关键真是的。

将XML加载到数据表中并在ID上创建PK并对数据表进行查询会更有效吗?

这是最有效的Linq/Xml代码吗?

myRows = XDocument.Parse(xmlString);    
result = myRows.Element("Rows").Elements("Row").Single(r => r.Element("id").Value == "1"); 
if (result != null) 
    string name = result.Element("name").Value; 

编辑为清楚:还有比ID &名字更多的元素。

回答

2

加载到Dictionary<int, string>,假设id域是唯一的和int

var myRows = XDocument.Parse(xmlString); 
var myDictionaryOfRows = myRows 
    .Descendants("Row") 
    .ToDictionary(e => int.Parse(e.Element("id").Value), 
     e => e.Element("name").Value); 
Console.WriteLine(myDictionaryOfRows[1]); 
+0

尼斯的思想,但忘了提有更多的属性比id&name。 – 2010-09-08 01:11:57

+0

@Andrew可以反序列化为一个'Dictionary '? – 2010-09-08 01:57:50

0

我会建议反序列化XML到一个类。所以你最终会得到一个自定义类型对象的集合。然后在你的收藏中使用你的linq。

但我更喜欢带班比原始XML :)工作

的XSD工具就派上用场了从架构生成类(虽然有时你需要改进的架构,这样你就没有好下场疯狂的多维数组(疯了,如果你不要求他们)。

,我也不会使用数据库将提供更好的速度不仅仅是这个处理内存中认为。