【问题标题】:Linq Order by a specific number first then show all rest in orderLinq 首先按特定数字排序,然后按顺序显示所有其余部分
【发布时间】:2012-03-29 21:34:28
【问题描述】:

如果我有一个数字列表:

1,2,3,4,5,6,7,8

我想按特定编号订购,然后显示其余部分。 例如,如果我选择“3”,则列表应为:

3,1,2,4,5,6,7,8

寻找 linq 和 c#。 谢谢

【问题讨论】:

    标签: c# asp.net linq sorting


    【解决方案1】:

    您可以使用OrderByThenBy 中的比较来执行条件排序。

    list.OrderByDescending(i => i == 3).ThenBy(i => i);
    

    我使用OrderByDescending 是因为我想首先匹配结果(truefalse“更高”)。

    【讨论】:

    • @cracker:将OrderByDescending 更改为OrderByi == 3 更改为i != 3
    • 如果要对字符串列myDataList.OrderByDescending(i => i.StringColumnValue[0] == filterStringValue[0]).ToList()进行排序。我在这里用了你的逻辑。根据过滤器起始字母,这些结果以相同起始字母的顺序显示
    • 所以整数收集工作但对象收集不起作用,我在这里遗漏了什么吗? object.OrderByDescending(m => m.id== 298).ThenBy(x => x.CreatedOn)
    • @ManishJoisar:它的工作方式相同。关键是m.id== 298 返回一个bool,它可以是truefalseOrderByDescending 将首先产生true 值。也许你认为它不起作用的原因是别的。创建一个问题,以便其他人可以提供帮助。
    【解决方案2】:

    可能是这样的:

    List<int> ls=new List<int>{1,2,3,4,5,6,7,8};
    int nbr=3;
    var result= ls.OrderBy (l =>(l==nbr?int.MinValue:l));
    

    【讨论】:

    • 对于 necro 评论感到抱歉,但这不是一个好主意。因为如果列表包含任何 int.MinValue 条目,这种方法将不起作用。
    【解决方案3】:

    一些答案​​已经对最后几个数字进行了排序(这可能是正确的,因为您只显示了一个已经排序的列表)。如果您希望“未选择”的数字以它们的原始、不一定排序的顺序而不是排序显示,你可以这样做;

    int num = 3;
    var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
    

    正如@DuaneTheriot 所指出的,IEnumerable's extension method OrderBy 进行了稳定的排序,不会改变具有相同键的元素的顺序。换句话说;

    var result = list.OrderBy(x => x != 3);
    

    同样可以先排序 3 并保持所有其他元素的顺序。

    【讨论】:

    • 你可以用list.OrderBy(i =&gt; i != 3)完成同样的事情。
    【解决方案4】:
    public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f)
    {       
        foreach ( var item in items.Where(f))
            yield return item;
        foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i))
            yield return item;
    }
    
    
    var items = new [] {1, 4, 2, 5, 3};
    items.TakeAndOrder(i=> i == 4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2012-01-25
      • 1970-01-01
      相关资源
      最近更新 更多