У меня есть 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 также может быть решением, мне просто нужно заставить эту вещь работать.