在OrderBy中使用LINQ自定义sorting逻辑
什么是正确的方式来sortingstring的列表,我希望项目以下划线'_'开头,在列表的底部,否则一切都按字母顺序排列。
现在我正在做这样的事情,
autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
如果你想自定义sorting,但不想提供一个比较器,你可以拥有它 – SQL风格:
autoList .OrderBy(a => a.StartsWith("_") ? 2 : 1 ) .ThenBy(a => a);
我认为你需要使用OrderBy(Func<>, IComparer<>)
并指定你自己的比较器,它将实现你的定制逻辑。
使用带有IComparer
的OrderBy的重载,第一个Func
参数将提供比较器,从那里你需要比较string。 首先处理一个或两个以_
开始的情况,然后从那里你可能需要string.Compare
_
并只使用标准的string.Compare
来sorting它们超出第一个_