C# 第一订购人';s结果空字符串作为动态OrderBy中的最后一个

C# 第一订购人';s结果空字符串作为动态OrderBy中的最后一个,c#,linq,C#,Linq,我有列表ExcelData作为我的列表。 我可以使用LINQ的函数OrderBy然后By来订购ExcelData,并将EmptyStringsArlast函数添加到我从这个家伙那里找到的OrderBy()。 代码如下所示: ExcelData = ExcelData .OrderBy(arr => arr.Item1[2], new EmptyStringsAreLast()) .ThenBy(arr => arr.Item1[1]) .ThenBy(arr

我有
列表ExcelData
作为我的列表。 我可以使用LINQ的函数OrderBy然后By来订购
ExcelData
,并将
EmptyStringsArlast
函数添加到我从这个家伙那里找到的OrderBy()。 代码如下所示:

ExcelData = ExcelData
    .OrderBy(arr => arr.Item1[2], new EmptyStringsAreLast())
    .ThenBy(arr => arr.Item1[1])
    .ThenBy(arr => arr.Item1[0])
    .ToList();
只要我不想使用动态OrderBy,这就行了。如果我使用动态OrderBy,比如这个(这个需要
System.Linq.dynamic
System.Linq.dynamic.Core
),我无法找到任何可能的方法将
emptyStringsArlast()
函数添加到第一个参数(
Item1[2]ASC
)。()

有没有办法做到这一点

ExcelData = ExcelData.AsQueryable()
    .OrderBy("'Item1[2] ASC, new EmptryStringsAreLast()', Item1[1] ASC, Item1[0] ASC")
    .ToList();

看来我设法弄明白了。通过添加
String.IsNullOrWhiteSpace(Item1[2])
,它将null或空作为最后一个排序

像这个

ExcelData = ExcelData.AsQueryable()
      .OrderBy("String.IsNullOrWhiteSpace(Item1[2]), Item1[2] ASC, Item1[1] ASC, Item1[0] ASC")
      .ToList();

看来我设法弄明白了。通过添加
String.IsNullOrWhiteSpace(Item1[2])
,它将null或空作为最后一个排序

像这个

ExcelData = ExcelData.AsQueryable()
      .OrderBy("String.IsNullOrWhiteSpace(Item1[2]), Item1[2] ASC, Item1[1] ASC, Item1[0] ASC")
      .ToList();

由于
emptyStringsRalast()
不是动态的,您能否先执行动态部分,然后将
emptyStringsRalast()
应用于结果?主题外,但我将创建一个自定义类型,而不是
元组
,这样代码更易于阅读。那么我将使用
列表
而不是
列表
如果我使用它而不是这个
列表
,我将如何从
列表
中获益?编辑我认为这不是唯一的原因。我不认为应用
EmptyStringsAreLast()
来获得结果会像在我的程序中那样有效,我想按3列排序。既然
EmptyStringsAreLast()
不是动态的,你能不能先做动态部分,然后应用
EmptyStringsAreLast())
to the result?Off-topic,但我会创建一个自定义类型,而不是
Tuple
,这样代码更容易阅读。那么我将使用
列表
而不是
列表
如果我使用它而不是这个
列表
,我将如何从
列表
中获益?编辑我想这并不是唯一的原因。我不认为应用
emptyStringsArlast()
生成结果会像在我的程序中那样有效,我想按3列排序。