首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#链接队列排序方式

C#链接队列排序方式
EN

Stack Overflow用户
提问于 2011-03-02 00:20:00
回答 4查看 5.6K关注 0票数 3

我有一个包含许多元素的Xelement。

我有以下代码来对它们进行排序:

代码语言:javascript
复制
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有内置的扩展/方法吗?

代码语言:javascript
复制
orderby Convert.ToInt32(y.Element("BUILD_ORDER").Value)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-02 00:22:16

LINQ to Objects没有内置的转换,但LINQ to XML有:

代码语言:javascript
复制
var calculation = from y in x.Elements("row")
                  orderby (int) y.Element("BUILD_ORDER")
                  select new
                  {
                      calcAttribute = y.Element("ELEMENT").Value
                  };

为什么你要使用匿名类型,而不是只选择你想要的值呢?例如:

代码语言:javascript
复制
var calculation = from y in x.Elements("row")
                  orderby (int) y.Element("BUILD_ORDER")
                  select y.Element("ELEMENT").Value;

请注意,如果缺少BUILD_ORDER或ELEMENT子元素,这两种方法都会抛出异常。您可以使用转换为int?而不是BUILD_ORDERint,以及转换为string的元素来修复此问题:

代码语言:javascript
复制
var calculation = from y in x.Elements("row")
                  orderby (int?) y.Element("BUILD_ORDER")
                  select (string) y.Element("ELEMENT");

当然,如果BUILD_ORDER存在,但不能被解析为整数,这仍然会失败。

如果您的数据应该始终包含这些元素,则第一种形式更好,因为它可以更早地检测到任何数据错误。

票数 7
EN

Stack Overflow用户

发布于 2011-03-02 00:22:26

我觉得挺不错的。您也可以使用Int32.Parse(...)。我不知道有什么内置的方法将字符串作为整数进行排序,但您当然可以编写自己的方法。

票数 2
EN

Stack Overflow用户

发布于 2011-03-02 00:22:36

是的,因为您的XML值不是类型化的,所以您必须手动转换它们,以便.NET能够按数字排序。

顺便说一下,int.Parse会给你带来稍微好一点的性能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5157195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档