我有一个非常简单的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;名。
答案 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工具可以方便地从模式中生成您的类(尽管有时您需要优化模式,这样您就不会得到疯狂的多维数组(如果您不需要它们就会疯狂)。
我不会想到使用数据库会比在内存中处理这个更快。