Linq以XML,最快的方式查找元素?

时间:2010-09-08 00:27:46

标签: c# xml linq optimization

我有一个非常简单的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>

并且需要对ID进行大量查询,速度非常关键。

将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&amp;名。

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

我建议将xml反序列化为类。因此,您最终会得到一组自定义类型对象。然后在该集合上使用你的linq。

但我更喜欢使用类而不是原始xml :)

xsd工具可以方便地从模式中生成您的类(尽管有时您需要优化模式,这样您就不会得到疯狂的多维数组(如果您不需要它们就会疯狂)。

我不会想到使用数据库会比在内存中处理这个更快。