我有一个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;
我如何确保获得的项目与数组中的项目顺序相同?
答案 0 :(得分:5)
您可以按Id
中ids
的索引订购行:
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());