2012-03-21 17 views
0

私のコードの1つの側面で苦労して、誰かが光を当てることを願っています。リストに追加するxdocumentのlinqクエリを追加する

私は単純なforeachループの中からxmlドキュメントを複数回取り込んでいます。私はリストに私のlinqクエリを追加したいが、それは毎回リストを書き換えている。ここでは、コードです:

IEnumerable<TranList> tList; 
foreach (var t in otherList) 
{ 
     //pulling xml data from service here - code not shown 
     XDocument xDoc = XDocument.Parse(xmlFromService); 
     tList = from x in xDoc.Descendants("Items") 
     select new TranList 
     { 
      BusDate = x.Descendants("BusDate").First().Value, 
      SeqNum = x.Descendants("SeqNum").First().Value, 
      Amount = x.Descendants("Amount").First().Value, 
      Credit = x.Descendants("Credit").First().Value 
     }; 
} 

、ここでは、参考のために私のxmlです:任意の助け

<Items> 
    <DbAmount>25,465.58</DbAmount> 
    <DBCount>296</DBCount> 
    <CrAmount>.00</CrAmount> 
    <CrCount>0</CrCount> 
    <Item> 
     <ID>0</ID> 
     <BusDate>20090126</BusDate> 
     <BlockNum>729</BlockNum> 
     <SeqNum>2</SeqNum> 
     <RelSeqNum>0</RelSeqNum> 
     <Serial /> 
     <Routing>211690953</Routing> 
     <Account>123456789</Account> 
     <Amount>30.00</Amount> 
     <Currency>USD</Currency> 
     <Credit>DEBIT</Credit> 
     <Onus>TRANSIT</Onus> 
    </Item> 
    <Item> 
    . . . . . . . . . . . . . . . 
    </Item> 
    . . . . . . . . . . . . . . . 
</Items> 

ありがとう!これに

答えて

0

現在、tListを連結する代わりに、毎回再割り当てされています

tList = (from x in xDoc.Descendants("Items") 
     select new TranList 
     { 
      BusDate = x.Descendants("BusDate").First().Value, 
      SeqNum = x.Descendants("SeqNum").First().Value, 
      Amount = x.Descendants("Amount").First().Value, 
      Credit = x.Descendants("Credit").First().Value 
     }).Concat(tList); 

をしかし、なぜ、あなたは最初の場所でforeachが必要なのでしょうか?あなたは現在ループ変数を使用していませんので、これはあまり意味がありません。

+0

ループでは、ループ変数の値に基づいて新しいxmlデータを再呼び出しします。そのコードを残して、それを乱さないようにしてください。 – Downtap

+0

これは魅力的に機能しました!私が必要としたものに対する非常に簡単な解決策、ありがとう! – Downtap

0

変更を:

List<TranList> tList = new List<TranList>(); 

foreach (var t in otherList) 
{ 
    //pulling xml data from service here - code not shown 
    XDocument xDoc = XDocument.Parse(xmlFromService); 
    tList.AddRange(from x in xDoc.Descendants("Items") 
    select new TranList 
    { 
     BusDate = x.Descendants("BusDate").First().Value, 
     SeqNum = x.Descendants("SeqNum").First().Value, 
     Amount = x.Descendants("Amount").First().Value, 
     Credit = x.Descendants("Credit").First().Value 
    }); 
} 

重要な部分は、tListは、今あなたがAddRange(...)を経由して、クエリ結果を追加するList<TranList>であるということです。

+0

私は他のソリューションを使用しましたが、私もこの1が好きです。お手伝いありがとう! – Downtap

0

これを試してみてください:

var result = from t in otherList 
      from x in XDocument.Parse(xmlFromService(t)).Root.Elements("Item") 
      select new TranList 
      { 
       BusDate = (string)x.Element("BusDate"), 
       SeqNum = (string)x.Element("SeqNum"), 
       Amount = (string)x.Element("Amount"), 
       Credit = (string)x.Element("Credit") 
      }; 
関連する問題