我有一个包含许多元素的Xelement。
我有以下代码来对它们进行排序:
var calculation = from y in x.Elements("row")
orderby y.Element("BUILD_ORDER").Value
select new
{
calcAttribute = y.Element("ELEMENT").Value
};这很好用,在BUILD_ORDER > 10之前,它会在1之后订购10。
如果我想要严格的数字顺序,我将元素转换为Int,这是正确的方法吗,或者LINQ有内置的扩展/方法吗?
orderby Convert.ToInt32(y.Element("BUILD_ORDER").Value)发布于 2011-03-02 00:22:16
LINQ to Objects没有内置的转换,但LINQ to XML有:
var calculation = from y in x.Elements("row")
orderby (int) y.Element("BUILD_ORDER")
select new
{
calcAttribute = y.Element("ELEMENT").Value
};为什么你要使用匿名类型,而不是只选择你想要的值呢?例如:
var calculation = from y in x.Elements("row")
orderby (int) y.Element("BUILD_ORDER")
select y.Element("ELEMENT").Value;请注意,如果缺少BUILD_ORDER或ELEMENT子元素,这两种方法都会抛出异常。您可以使用转换为int?而不是BUILD_ORDER的int,以及转换为string的元素来修复此问题:
var calculation = from y in x.Elements("row")
orderby (int?) y.Element("BUILD_ORDER")
select (string) y.Element("ELEMENT");当然,如果BUILD_ORDER存在,但不能被解析为整数,这仍然会失败。
如果您的数据应该始终包含这些元素,则第一种形式更好,因为它可以更早地检测到任何数据错误。
发布于 2011-03-02 00:22:26
我觉得挺不错的。您也可以使用Int32.Parse(...)。我不知道有什么内置的方法将字符串作为整数进行排序,但您当然可以编写自己的方法。
发布于 2011-03-02 00:22:36
是的,因为您的XML值不是类型化的,所以您必须手动转换它们,以便.NET能够按数字排序。
顺便说一下,int.Parse会给你带来稍微好一点的性能。
https://stackoverflow.com/questions/5157195
复制相似问题