В Linq Query ToList данные помещаются не в список, а в список из одного элемента. - PullRequest
0 голосов
/ 24 ноября 2010

У меня есть следующий запрос (который вложен в запрос большего размера):

PaymentType = (from paymenttype in offer.Elements(myns + "paymentTypes")
               select paymenttype.Value).ToList()

myns - это тип XNamespace

дерево XML выглядит как

<offer>
    <paymentTypes>
        <paymentType>One String</paymentType>
        <paymentType>Another string</paymentTYpe>
    </paymentTypes>
</offer>

PaymentType определяется как:

List<string> PaymentType = new List<string>();

Когда мой код выполняется, я вижу только один созданный элемент:

PaymentType[0] = "OneStringAnotherString"

а не

PaymentType[0] = "OneString"
PaymentType[1] = "AnotherString"

Я не могу разобраться, что я делаю неправильно. Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Если вы посмотрите на это в отладчике, вам будет легче сказать, что вы получаете элемент paymentTypes.Если вы знаете, что есть только один, самое простое изменение - это добавить .Elements () в конец, чтобы получить дочерние элементы:

        var results = (from paymenttype in offer.Elements("paymentTypes").Elements()
                       select paymenttype.Value).ToList();

Это даст вам две строки, которые вы искали.

1 голос
/ 24 ноября 2010

Value из <paymentTypes> в вашем примере - "One StringAnother string".

Вам необходимо выбрать Value из каждого <paymentType> индивидуально:

var query = from paymenttype in offer.Element(myns + "paymentTypes")
                                     .Elements(myns + "paymentType")
            select paymenttype.Value;

List<string> PaymentType = query.ToList();

Или, если есть несколько <paymentTypes>, Value от каждого <paymentType> в каждом <paymentTypes>:

var query = from paymenttypes in offer.Elements(myns + "paymentTypes")
            from paymenttype in paymenttypes.Elements(myns + "paymentType")
            select paymenttype.Value;

List<string> PaymentType = query.ToList();
0 голосов
/ 24 ноября 2010

Это найдет все элементы paymentType

var paymentTypes = (from paymentType 
                    in offer.Descendants(myns + "paymentType") 
                    select paymentType.Value).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...