简体   繁体   English

LINQ orderBy可能带有空值

[英]LINQ orderBy with possible null values

I have following code: 我有以下代码:

var ordered = allrows.OrderByDescending(n => int.Parse(n[SelectedScore].ToString()))
            .ThenByDescending(o => int.Parse(o[FirstSelected].ToString()))
            .ThenByDescending(o => int.Parse(o[SecondSelected8].ToString()))

However SelectedScore, FirstSelected, SecondSelected may be empty. 但是SelectedScore,FirstSelected,SecondSelected可能为空。 I would like the order by to skip on empty ones. 我想让订单跳过空的订单。

So for example if FirstSelected is empty elements would be ordered first by SelectedScore then by SecondSelected. 因此,例如,如果FirstSelected为空,则元素将首先由SelectedScore排序,然后由SecondSelected排序。

Don't know how to do that in an elegant way. 不知道如何以优雅的方式做到这一点。

Thanks in advance 提前致谢

SelectedScore , FirstSelected , and SecondSelected are all variables that do not depend on the the value of the row, so you can just make the order-by call depending on whether each value is set. SelectedScoreFirstSelectedSecondSelected都是不依赖于行值的变量,因此您可以根据是否设置每个值来进行order-by调用。

In order to have a common starting point (so you don't have to figure out which is the first set variable, to call OrderByDescending instead of ThenByDescending ), you can sort by a constant value first: 为了有一个共同的起点(因此,您不必弄清楚哪个是第一个设置变量,可以调用OrderByDescending而不是ThenByDescending ),可以ThenByDescending一个常量值进行排序:

var ordered = allrows.OrderBy(x => 0);

if (!string.IsNullOrEmpty(SelectedScore))
    ordered = ordered.ThenByDescending(o => int.Parse(o[SelectedScore].ToString()));

if (!string.IsNullOrEmpty(FirstSelected))
    ordered = ordered.ThenByDescending(o => int.Parse(o[FirstSelected].ToString()));

if (!string.IsNullOrEmpty(SecondSelected))
    ordered = ordered.ThenByDescending(o => int.Parse(o[SecondSelected].ToString()));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM