Сортировка Linq to XML / проблема заказа, сортируя по подэлементам - PullRequest
1 голос
/ 20 сентября 2011

У меня есть XML-файл, частью которого является элемент GoodsItems.Я хочу заказать элементы GoodsItem, чтобы на первом месте были элементы с субэлементом SupplementaryInformationLines.SupplementaryInformationLine с Code == "X002" и Text != "NLR".Впоследствии все элементы должны быть упорядочены элементом GoodsItem.TaricCode.

<GoodsItems>
  <GoodsItem>
    <GoodsDescription1>Some goods to be sorted last</GoodsDescription1>
    <TaricNumber>854129</TaricNumber>
    <SupplementaryInformationLines>
      <SupplementaryInformationLine>
        <Type>B.H</Type>
        <Code>X002</Code>
        <Text>NLR</Text>
      </SupplementaryInformationLine>
      <SupplementaryInformationLine>
        <Type>SU</Type>
        <Code></Code>
        <Text>Some text</Text>
      </SupplementaryInformationLine>
    </SupplementaryInformationLines>
  </GoodsItem>
  <GoodsItem>
    <GoodsDescription1>Some goods to be sorted first</GoodsDescription1>
    <TaricNumber>854129</TaricNumber>
    <SupplementaryInformationLines>
      <SupplementaryInformationLine>
        <Type>B.H</Type>
        <Code>X002</Code>
        <Text>SE_A_4324234</Text>
      </SupplementaryInformationLine>
      <SupplementaryInformationLine>
        <Type>SU</Type>
        <Code></Code>
        <Text>Some text</Text>
      </SupplementaryInformationLine>
    </SupplementaryInformationLines>
  </GoodsItem>
</GoodsItems>

Я проверил его и заставил правильно работать с первой частью упорядочения, затем добавил упорядочение TaricNumber и изменил использование.Значение, чтобы получить строковые значения элементов в предложении where вместо приведения к строке, поскольку некоторые файлы получили исключение NullPointerException при использовании .Value.После этих изменений я не могу заставить его работать снова.Он только заказывает GoodsItems по TaricNumber.

var query = from xeGoodsItem in xeCustClearance.Element(nsName + "GoodsItems").Elements(nsName + "GoodsItem")
    let sortValue1 = (
        from xeSuppInfo in xeGoodsItem.Element(nsName + "SupplementaryInformationLines").Elements(nsName + "SupplementaryInformationLine")
        where ((string)xeSuppInfo.Element("Code") == "X002" && (string)xeSuppInfo.Element("Text") != "NLR")
        select 1).FirstOrDefault()
    orderby sortValue1 descending, (string)xeGoodsItem.Element(nsName + "TaricNumber").Value ascending
    select xeGoodsItem;

Мне не нужно сохранять XML-файл с упорядочением, я делаю только сортировку в памяти.Хотя использование ReplaceNode вместо запроса linq также может быть решением, мне просто нужно заставить эту вещь работать.

1 Ответ

2 голосов
/ 20 сентября 2011

ответил в моем комментарии.Это было пропущенное имя пространства имен перед именем элемента, из-за чего упорядочивание не работало должным образом.

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