如何使用数组订购linq结果?

Man*_*rok 2 c# arrays linq-to-sql

我有一个ID数组,按顺序,使用这些ID然后我发出一个linq查询,但是我希望linq查询的结果以与数组中的ID相同的顺序返回.

例:

int[] ids = new [] {10, 9, 8, 7};

var query = from row in context.Table where ids.Contains(row.Id) select row;
Run Code Online (Sandbox Code Playgroud)

我如何确保获得的项目与阵列中的项目顺序相同?

dtb*_*dtb 5

您可以按其in 的索引对行进行排序:Idids

var query = from row in context.Table
            where ids.Contains(row.Id)
            orderby Array.IndexOf(ids, row.Id)
            select row;
Run Code Online (Sandbox Code Playgroud)

我不确定LINQ-to-SQL提供程序是否支持这个; 您可能需要使用LINQ-to-Objects执行排序:

var query = from row in context.Table
            where ids.Contains(row.Id)
            select row;

var orderedQuery = from row in query.AsEnumerable()
                   orderby Array.IndexOf(ids, row.Id)
                   select row;
Run Code Online (Sandbox Code Playgroud)

要么

var orderedQuery = context.Table
                          .Where(row => ids.Contains(row.Id))
                          .AsEnumerable()
                          .OrderBy(row => Array.IndexOf(ids, row.Id));
Run Code Online (Sandbox Code Playgroud)