gpt4 book ai didi

C# LINQ 顺序

转载 作者:行者123 更新时间:2023-11-30 13:24:21 27 4
gpt4 key购买 nike

我有一个包含许多元素的 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 子元素,这两者都会抛出异常。您可以通过将 BUILD_ORDER 转换为 int? 而不是 int 来解决这个问题,并为 string元素:

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

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

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

关于C# LINQ 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com