0

簡単な質問ですが、次の行は一目瞭然です。

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

しかし念のため、ノード (DOB) のいずれかの値が processing.dateofbirth と同じ日時である場合は false を返したいと思います。生年月日がそこにない場合は xml に追加する必要があるからです。

私の2つの質問は

これは、linq to xml を使用して、これを達成するための最短のコードですか? (ないと思います)

これは数百万のレコードに対して実行されますが、これを達成するためのより効率的な方法はありますか?

編集

言い間違えました、すいません。XML は小さいです。データベースには 1 人の人物を表す何百万もの行があり、列 PersonXml には名前、生年月日、番号、およびその他の要素がいくつか含まれています。行は SqlDataReader を介して読み込まれ、検証/更新されます。これはその一部です。

4

1 に答える 1

0

1)ここではわかりません。少なくとも、それを書くためのより短い方法は考えられません。

2) 形式が常に同じである場合は、データを直接操作することを検討できます。文字列またはストリームで直接作業します。文字列を XDoc に解析すると、常にそのシェアが削減されます。xml ファイルは非常に小さく、変更されない可能性があるとおっしゃいました。

メモリに保持するには大きすぎるxmlファイルを作成しているプロジェクトの場合、ファイルストリームで動作し、一致するパターンをバイト単位で検索するクラス(実際にはSOでそのコードの一部を見つけました)を作成しました。あなたの場合、これはスタイルが悪く、操作が少し不便かもしれませんが、速度が重要な場合は、いつでも XDocument に勝ります。

-編集- あなたの編集内容を読んで、速度はあまり気にしていないと思います。これは、古いデータを修正するために 1 回だけ実行する必要があるタスクですか? その場合、ソリューションに固執することをお勧めします.Taskfactoryを使用して、データベースから受け取った行ごとに新しいタスクを実行するスレッドを生成し、一晩実行させます. 私の考えでは、最も簡単で安全な解決策

于 2013-07-10T13:53:40.507 に答える