0

快速的问题,以下行应该是不言自明的:

doc.Descendants("DOB").Select(dob => dob.ToString()).All(dob => DateTime.Parse(dob.ToString()) != DateTime.Parse(processing.DateOfBirth))

但以防万一,如果节点(DOB)的任何值与 processing.dateofbirth 的日期时间相同,我想返回 false,因为如果它不在其中,我需要将出生日期添加到 xml 中。

我的两个问题是

这是用 linq to xml 完成此任务的最短代码量吗?(我认为不是)

这将针对数百万条记录运行,是否有更有效的方法来完成此操作?

编辑

我误会了,对不起。XML 很小。数据库中有数百万行代表一个人,其中一列 PersonXml 仅包含姓名、出生日期、号码和其他一些内容。这些行通过 SqlDataReader 读入并验证/更新,这是其中的一部分。

4

1 回答 1

0

1)这里不确定,至少我想不出更短的方法来写它。

2)如果格式始终相同,您可以考虑直接处理数据。要么直接在字符串上工作,要么直接在流上工作。将字符串解析为 XDoc 将始终减少其份额。您提到 xml 文件非常小,可能不会更改。

对于我正在编写一个要保存在内存中的 xml 文件的项目,我编写了一个类(实际上在 SO 上找到了该代码的部分),它适用于文件流并逐字节查找匹配的模式。在您的情况下,这可能是一种糟糕的风格并且使用起来有点不方便,但如果速度很重要,这将随时击败 XDocument。

-edit-阅读您的编辑,我认为速度并不是您真正关心的问题,这是您可能只需执行一次即可更正一些旧数据的任务?在这种情况下,我建议您坚持使用您的解决方案,也许使用 Taskfactory 来生成线程,这些线程为您从数据库收到的每一行运行一个新任务并让它运行一整夜。在我看来最简单和最安全的解决方案

于 2013-07-10T13:53:40.507 回答