【问题标题】:Sort IQueryable by specific order按特定顺序对 IQueryable 进行排序
【发布时间】:2017-11-01 19:56:14
【问题描述】:

我有一张表,我想按名称按特定顺序和日期提取项目。

id name  date
1  XYZ   1:30
2  ABC   1:40
3  LMNOQ  1:50
4  ABC   1:20

我创建了订单

List<string> itemNames = new List<string>();
       documentOrder.Add("XYZ");
       documentOrder.Add("ABC");     
       documentOrder.Add("LMNOQ");

然后拉取数据,我认为顺序会保持不变。

var myTable = _context.TheTable.Where(x => itemNames.Contains(x.id));

myTable 数据看起来像

id name  date
1  XYZ   1:30
2  ABC   1:40
4  ABC   1:20
3  LMNOQ  1:50

现在我需要按日期排序,而不会弄乱名称顺序。我需要它看起来像这样。

id name  date
1  XYZ   1:30
2  ABC   1:20
4  ABC   1:40
3  LMNOQ  1:50

【问题讨论】:

标签: c# sorting iqueryable


【解决方案1】:
var myTable = _context.TheTable.Where(x => itemNames.Contains(x.id))
                      .OrderBy(x => x.name).ThenBy(x => x.date);

【讨论】:

    【解决方案2】:

    使用IQueryable 时,您可以使用多个排序语句按您想要的顺序(按名称,然后按日期...这看起来有点像时间)。

    var orderedQueryable = queryable.OrderBy(q => q.Name).ThenBy(q => q.Date);
    

    【讨论】:

    • 如果我按姓名排序,那不是按字母顺序排列姓名吗?
    • @user1854438 是的,它会的。您的问题按字母顺序显示...您想要不同的东西吗?
    • 是的,对不起,我的例子是一个错误。我会更新问题
    • 要简单地“保留原始名称顺序”,您需要填充一个附加属性,以便您仍然可以订购。例如,如果您迭代集合并为每一行分配一个订单整数,并在每次名称更改时递增,您可以按“OriginalOrder”排序,然后按“Date”排序。
    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多