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

时间:2011-11-04 10:21:17

标签: 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;

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

3 个答案:

答案 0 :(得分:5)

您可以按Idids索引订购行:

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

我不确定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;

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

答案 1 :(得分:0)

答案 2 :(得分:0)

您可以按照Ids枚举,然后搜索相应的表条目:

// if table contains multiple rows per id
var resultSet = ids.SelectMany(id => context.Table.Where(tbl => tbl == id));

// if table contains one row per id
var resultSet = ids.Select(id => context.Table.Where(tbl => tbl == id).Single());