0

データベース テーブルの 1 つに、文字列として格納された xml データを含む列を持つ多数のレコードがあります。このデータを取得し、文字列を解析して、UI にバインドしたい特定の情報を取得する最良の方法は何ですか。現在、私はこれをやっています -

Customer テーブルのデータ列には、xml データが文字列として格納されています。

List<string> myData = new List<string>();
//populate the list with the data from the customer table
List<XElement> myXmlData = new List<XElement>();
foreach (var item in myData)
 {
      XElement xmlItem = XElement.Parse(item);
      myXmlData.Add(xmlItem);
 }

this.DataContext = myXmlData;

次に、データ テンプレートを使用して、次を使用して必要な xml データにバインドしています。

<TextBlock Text="{Binding Path=Element[Name].Value}"/>

これは正しく機能しますが、正しい方法であるかどうかはわかりません。パフォーマンスが懸念されるので、他の方法でこれを行うとパフォーマンスが向上しますか?

4

2 に答える 2

2

パフォーマンスが懸念事項だとおっしゃっていますが、測定したことはありますか? それは問題ですか?これが攻撃の最初の行になるはずです。

コードに関しては、LINQ をより徹底的に使用します。

List<XElement> myXmlData = myData.Select(XElement.Parse).ToList();
this.DataContext = myXmlData;

メソッド グループの変換が機能しない場合 (ルールが微妙で、今は簡単にテストできません)、ラムダ式を使用できます。

List<XElement> myXmlData = myData.Select(x => XElement.Parse(x)).ToList();
this.DataContext = myXmlData;

「リストの作成」にLINQが含まれている場合は、すべてを一度に実行できる可能性があることに注意してください-たとえば

this.DataContext = dbContext.Customers
                            .Select(c => c.CustomerXml)
                            .AsEnumerable() // Out of LINQ to SQL or whatever
                            .Select(XElement.Parse)
                            .ToList();
于 2012-05-23T16:32:59.920 に答える
0

XMLデータから必要な特定の情報に応じて(XMLが実際に文字列として保存されているのか、それがあなたの目的なのか、あなたの質問からは明らかではありません)、それをオブジェクトに逆シリアル化してから抽出することを検討しましたかそこからの関連データ?

XSD は、クラスを自動的に作成することでこれを支援できる優れた .NET ツールです。http://www.cricketmx.com/articles/read/using-xsd-to-assist-in-xml-deserialisation-to-objects-in-c-sharp/にいくつかの情報があります。

于 2012-05-28T15:29:51.817 に答える