首页 > 解决方案 > C# 使用起始位置和循环排序对象列表

问题描述

我有一个奇怪的问题:)

我有一个如下所示的对象列表:

var list = new []
{
    new { Id = 1, Name = "Marcus" },
    new { Id = 2, Name = "Mattias" },
    new { Id = 3, Name = "Patric" },
    new { Id = 4, Name = "Theodor" },
};

我想对提供“开始 id”的列表进行排序

例如,如果我提供“start id”3,结果应如下所示:

ID 姓名
3 帕特里克
4 西奥多
1 马库斯
2 马蒂亚斯

我不知道从哪里开始,所以我真的需要你们编码大神的帮助

该列表来自一个 sql 表,但对我来说,排序发生在哪里并不重要(在 sql 查询或 c# 代码中)

标签: c#sqllinq

解决方案


Try this:

var list = new []
{
    new { Id = 1, Name = "Marcus" },
    new { Id = 2, Name = "Mattias" },
    new { Id = 3, Name = "Patric" },
    new { Id = 4, Name = "Theodor" },
};

var start_id = 3;
var max_id = list.Max(y => y.Id);

var result =
    from x in list
    orderby (x.Id + max_id - start_id) % max_id
    select x;

I get:

result


推荐阅读