C# 从逗号分隔ID重新排序列表

C# 从逗号分隔ID重新排序列表,c#,list,linq,C#,List,Linq,我有一个要重新排序的对象列表。顺序在字符串中确定 我希望我当前的代码比文本解释得更好 List<DataObject> objects = GetDataObjectsFromDatabase(); string order = "1,3,2"; List<DataObject> orderedObjects = new List<DataObject> foreach(string index in order.Split(',') { ordere

我有一个要重新排序的对象列表。顺序在字符串中确定

我希望我当前的代码比文本解释得更好

List<DataObject> objects = GetDataObjectsFromDatabase();
string order = "1,3,2";
List<DataObject> orderedObjects = new List<DataObject>
foreach(string index in order.Split(',')
{
    orderedObjects.Add(objects.FirstOrDefault(x => x.id == index));
}

是否有一个Linq语句或更好的方法来实现这一点?

var data=order.Split','.ToList

以下是基于linq中另一个列表的排序列表示例:

        List<OBJ> Test = new List<OBJ>();
        Test.Add(new OBJ(1));
        Test.Add(new OBJ(2));
        string Order = "1,2,3";
        List<string> OrderBy = Order.Split(new char[] { ',' }).ToList();
        Test = Test.OrderBy(x => OrderBy.IndexOf(x.Field1.ToString())).ToList();
        Console.ReadKey();
假设x.Field1是您的ID或任何您想要排序的字段。

前提是。选择将按顺序进行:


var orderedObjects=order.Split','.Selectint.Parse.Selectindex=>objects.FirstOrDefaultobj=>obj.id==index.ToList

对于初学者,您可以使用ToList,而不是将项目逐个添加到列表中。可能是order.Split','.Selectidx=>objects.FirstOrDefaultx=>x.id==idx.ToList更好的标准是什么?更少的代码?性能更好?更具可读性?您能保证您的订单字符串不会引用不存在的对象吗?首先,您不应该在字符串中保持订单。我假设您从某个地方加载它,结果可能是1,A,2,这可能会导致错误。@MichałWoliński字符串来自一个隐藏的输入字段。这用于用户可以拖放数据对象以对其进行排序的界面。这是在javascript中完成的,javascript将项目的顺序写入隐藏字段。@PatrickNijhuis您是否尝试过简单的拆分,选择?你还想要别的吗?您可以修改数据访问方法以返回字典,从而加快ID查找速度。如果使用EF或EF Core,则只需在末尾添加对ToDictionaryitem=>item.id,item=>item的调用,而不是对ListThank的回复表示感谢,但这并没有达到我的目标。这只会生成一个列表。如果order有3个数字,list有2个,则输出将有3个元素,last将为null。Split返回一个数组,因此ToList只分配一个额外的对象,而没有任何好处。同时使用OrderBy和IndexOf代价高昂,因为IndexOf每次都必须扫描整个列表。使用Split.ToLookup或ToDictionary实际上可以提高性能