Dar*_*ung 3 c# linq sql-order-by
我有一个包含许多元素的Xelement.
我有以下代码来对它们进行排序:
var calculation = from y in x.Elements("row")
orderby y.Element("BUILD_ORDER").Value
select new
{
calcAttribute = y.Element("ELEMENT").Value
};
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,直到BUILD_ORDER> 10,它在1之后命令10.
如果我想按严格的数字顺序,我将元素称为Int,这是正确的方法吗,还是LINQ有一个内置的扩展/方法?
orderby Convert.ToInt32(y.Element("BUILD_ORDER").Value)
Run Code Online (Sandbox Code Playgroud)
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
};
Run Code Online (Sandbox Code Playgroud)
您有没有理由使用匿名类型,而不是仅仅选择您想要的值?例如:
var calculation = from y in x.Elements("row")
orderby (int) y.Element("BUILD_ORDER")
select y.Element("ELEMENT").Value;
Run Code Online (Sandbox Code Playgroud)
请注意,如果缺少BUILD_ORDER或ELEMENT子元素,则这两个都将引发异常.你可以使用转换int?代替intfor 来修复它BUILD_ORDER,并转换string为ELEMENT:
var calculation = from y in x.Elements("row")
orderby (int?) y.Element("BUILD_ORDER")
select (string) y.Element("ELEMENT");
Run Code Online (Sandbox Code Playgroud)
如果存在BUILD_ORDER,则仍然会失败,但当然不能将其解析为整数.
如果您的数据应始终具有这些元素,则第一种形式更好,因为它会更早地检测到任何数据错误.