当前位置: 首页 > 编程语言 > C#

C#LINQOrderby——true-false如何影响orderby?

时间:2023-04-10 12:56:59 C#

C#LINQOrderby-true/false如何影响orderby?我正在处理一些LINQ排序,因为我有一个需要按顺序排序的ID列表。但是,某些ID需要优先于标准排序。鉴于此C#代码(可以粘贴到.NETFiddle中进行测试),排序按照我需要的方式工作,但我不明白为什么包含的非(!)运算符给我正确的排序?我预期的排序输出是(5,1,2,3,4,6,7,8,9)。如果我的订单中包含,它是否应该优先考虑返回true的行?相反,它似乎优先排序返回false的行。使用System.Linq;使用系统;公共类程序{publicstaticvoidMain(){varnumbersToFilterBy=new[]{5,11,20};varx=new[]{newXClass(){Id=1},newXClass(){Id=9},newXClass(){Id=5},newXClass(){Id=3},newXClass(){Id=4},newXClass(){Id=2},newXClass(){Id=6},newXClass(){Id=8},newXClass(){Id=7}};vartrueData=(fromdatainxorderby!numbersToFilterBy.Contains(data.Id),data.Id选择数据).ToList();foreach(varitemintrueData){Console.WriteLine(item.Id);}}publicclassXClass{publicintId{get;set;}}}为什么会出现这种情况,请问有何解释?OrderBy方法默认按升序对项目进行排序。现在,假设布尔值的数字表示是:false值自然会排在第一位。如果要颠倒顺序,只需使用降序关键字:vartrueData=(fromdatainxorderbynumbersToFilterBy.Contains(data.Id)descending,data.Idselectdata).ToList();基本上,false先于true...将它们视为false=0,true=1。这与bool.CompareTo(bool)的文档一致。如果要将“true”值设置为优先级,请使用OrderByDescending。排序与优先级无关——它与序数值有关。您正在对布尔值执行升序排序,并且在该上下文中false的序数值低于true。让我以List的例子来解释。考虑以下代码片段:ListBoolList=newList(){true,false,false,true};varopList=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然后bydata.Id将为您提供5、1、2、3、4、6、7、8、9的准确结果。如果删除!从OrderBy中,它会为您提供第一个排序结果,例如1,9,3,4,2,6,8,7,5,因为条件为5,因此它将排在最后。以上就是C#学习教程:C#LINQOrderby——true/false如何影响orderby?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: