加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#LINQ orderby

发布时间:2020-12-16 10:28:55 所属栏目:百科 来源:网络整理
导读:我有一个包含许多元素的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,
我有一个包含许多元素的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)

解决方法

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,以及ELEMENT的字符串转换:

var calculation = from y in x.Elements("row")
                  orderby (int?) y.Element("BUILD_ORDER")
                  select (string) y.Element("ELEMENT");

如果存在BUILD_ORDER,则仍然会失败,但当然不能将其解析为整数.

如果您的数据应始终具有这些元素,则第一种形式更好,因为它会更早地检测到任何数据错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读