C#LINQ Orderby – true / false如何影响orderby?
我正在研究一些LINQ排序,因为我有一个ID列表,我需要按顺序排序。 但是,某些ID需要优先于标准排序。
鉴于这个C#代码(可以粘贴到.NET Fiddle进行测试),排序按照我需要的方式工作,但我不明白为什么包含的not( !
)运算符给我正确的排序?
我预期的排序输出是( 5, 1, 2, 3, 4, 6, 7, 8, 9
)。
如果我的订单中Contains
,它是否应该为返回true的行赋予优先级? 相反,它似乎为返回false的行提供排序优先级。
using System.Linq; using System; public class Program { public static void Main() { var numbersToFilterBy = new [] {5, 11, 20}; var x = new [] {new XClass(){Id = 1}, new XClass(){Id = 9}, new XClass(){Id = 5}, new XClass(){Id = 3}, new XClass(){Id = 4}, new XClass(){Id = 2}, new XClass(){Id = 6}, new XClass(){Id = 8}, new XClass(){Id = 7}}; var trueData = (from data in x orderby !numbersToFilterBy.Contains(data.Id), data.Id select data).ToList(); foreach(var item in trueData){ Console.WriteLine(item.Id); } } public class XClass{ public int Id{get;set;} } }
为什么会发生这种情况有什么解释?
OrderBy方法默认按升序对项目进行排序。 现在,假设布尔值的数字表示为:
false
价值自然会先来。 如果要反转订单,只需使用descending
关键字:
var trueData = (from data in x orderby numbersToFilterBy.Contains(data.Id) descending, data.Id select data).ToList();
基本上, false
早于true
…将它们视为false = 0,true = 1。 这与bool.CompareTo(bool)
的文档保持一致。
如果要将“true”值设置为优先级,请使用OrderByDescending
。
订购不是优先级 – 它是关于序数值 。 您正在对布尔值执行升序,而false
在该上下文中的序数值低于true
。
让我用List
的例子解释一下。 请考虑以下代码段:
List BoolList = new List () { true, false, false, true }; var opList = BoolList.OrderBy(x => x).ToList();
最后, opList
的值将为false
, false
, true
, true
,这意味着当我们将OrderBy应用于布尔值列表时,false将首先出现。 这是因为false被认为是0
而true将被认为是1
。
在您的情况下,列表首先根据orderby !numbersToFilterBy.Contains(data.Id)
排序为5,1,9,3,4,2,6,8,7
然后按data.Id
将为您提供确切的结果为5, 1, 2, 3, 4, 6, 7, 8, 9
。
如果删除了!
从OrderBy
它给你第一个排序结果,如1,9,3,4,2,6,8,7,5
因为条件为5
因此它将在排序中排在最后。
上述就是C#学习教程:C#LINQ Orderby – true / false如何影响orderby?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031213.html