Linq 首先按特定数字排序,然后按顺序显示所有其余部分

Posted

技术标签:

【中文标题】Linq 首先按特定数字排序,然后按顺序显示所有其余部分【英文标题】:Linq Order by a specific number first then show all rest in order 【发布时间】: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#。 谢谢

【问题讨论】:

【参考方案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 值。也许你认为它不起作用的原因是别的。创建一个问题,以便其他人可以提供帮助。 ***.com/questions/70213940/…【参考方案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);

【讨论】:

以上是关于Linq 首先按特定数字排序,然后按顺序显示所有其余部分的主要内容,如果未能解决你的问题,请参考以下文章

Linq 按产品排序但显示类别

使用 Linq to SQL 的困难排序顺序

使用 Linq 按名称频率对列表进行排序

按数字(最高优先)然后按字母(字母顺序)对对象集合进行排序

sql server 按字母顺序排序,然后是数字

C# LINQ 组按属性集合,然后按列表定义的显式顺序对每个组进行排序[重复]