Добавление linq-запроса xdocument к списку - PullRequest
0 голосов
/ 21 марта 2012

Борьба с одним аспектом моего кода, который, я надеюсь, кто-то может пролить немного света.

Я извлекаю XML-документ несколько раз из простого цикла foreach. Я хочу добавить свой запрос 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>

Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

В настоящее время вы каждый раз переустанавливаете 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 голосов
/ 21 марта 2012

Попробуйте это:

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")
             };
0 голосов
/ 21 марта 2012

Измените это на:

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 теперь является List<TranList>, к которому вы добавляете результаты запроса с помощью AddRange(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...