2011-12-22 18 views
-3
<root> 
    <data1> 
     <Element1>Value</Element1> 
     <Element2>Value</Element2> 
     <Element3>Value</Element3> 
    </data1> 
    <data2> 
     <Element1>Value</Element1> 
     <Element2>Value</Element2> 
    </data2> 
</root> 

LINQ複数の列

<root> 
    <d1e1>value<d1e1> 
    <d1e2>value<d1e2> 
    <d2e1>value<d2e1> 
</root> 

それを処理するための最も効率的な方法は何ですか? ForeachまたはLinq理論では、Linqはほとんどの場合高速である必要があり、速度はこのプロジェクトの本質です。

何か考えですか?

+6

あなたが説明してもらえませんように見えるか分からないのですか?なぜd1e3要素、またはd2e2要素がないのですか? –

+2

"理論的にlinqはもっと速くなければならない"とは言えない。 LINQは単なるショートカットコードです。それはそれほど速くはありません。 LINQ式がILにどのようにコンパイルされ、理解するのかを見てください。構造をelemetの答として – Amy

+0

= data1->要素1 = data1->エレメント2 = data2->要素1 – Jester

答えて

0

YのプールからXノードを選択するというアイデアがありました。ここでの例は、問題を示すために簡略化されています。一般に、私は1つのサブレベル(別名ルート+レベル1)を持つためにフラットアウトする必要があるマルチレベルのxmlを持っていますが、ソースからは私にとって興味のある特定の要素が必要です。

とにかく私はforeachでそれをやったので解決しました。xmlで指定されたShemaがあっても、アクセス可能なLINQ dosentはとにかく働いていればそれが分かりました。

ソリューションは、このようなものだった:

  1. 私は機能を作った:

    public System.Xml.XmlElement GetSubElement(XmlElement Parent, string element) 
    { 
    System.Xml.XmlElement ret = null; 
    if (Parent == null) 
        return ret; 
    
    XmlNodeList ContentNodes = Parent.GetElementsByTagName(element); 
    if (ContentNodes.Count > 0) 
    { 
        XmlNode node = ContentNodes.Item(0); 
        ret = (XmlElement)node; 
    } 
    
    return ret; 
    } 
    
  2. 私は要素を持っ

  3. を繰り返したエリアでのforeachループを作りましたそれは上記の機能を持つ繰り返しの文脈から外れています。

とにかくそれを解決しました。

編集: このコードはCtrlキー+ K dosent cosを正しく表示するために取得する方法transformatinoが起こることを意味しているかをより詳細に、それは