First OrderBy的结果为空字符串,而动态OrderBy中的最后一个为空

时间:2019-07-28 11:52:30

标签: c# linq

我有List<Tuple<string[], SolidColor>> ExcelData作为列表。 我可以使用LINQ的OrderBy和ThenBy函数对ExcelData进行订购,并将EmptyStringsAreLast函数添加到我从这个人(https://stackoverflow.com/a/14641992/11848085)找到的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.DynamicSystem.Linq.Dynamic.Core),我将无法找出将EmptyStringsAreLast()函数添加到第一个参数的任何方法( Item1[2] ASC)。 (https://stackoverflow.com/a/8660293

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

有没有办法做这样的事情?

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

1 个答案:

答案 0 :(得分:0)

好像我设法弄清楚了。通过添加String.IsNullOrWhiteSpace(Item1[2]),它将最后一个排序为null或空。

喜欢这个

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