基于其他整数列表控制LINQ查询顺序

时间:2013-03-15 20:09:15

标签: c# linq

我正在进行LINQ查询,我从表视频中选择视频信息。查询仅选择以下列表中存在ID的视频:

List<int> results; //Has some values
var query = from l in dataContext.Videos
                 where results.Contains(l.ID)
                 select l;

现在如何在查询中订购项目(视频信息),使其ID与List结果的顺序相同?

我可以这样做:

List<int> results; //Has some values
var query = from k in results
            from l in dataContext.Videos
            where k==l.ID
            select l;

但这很慢,我需要更快的东西。

2 个答案:

答案 0 :(得分:6)

使用join,速度更快

var orderedByIDList = from k in results
join l in dataContext.Videos
on k equals l.Id
select l;

由于@MarcinJuraszek和@Phil的评论加入/编辑,谢谢你们。

首先抓住你的数据然后排序,这就是我得到的:

var myList = (from l in dataContext.Videos
where results.Contains(l.ID)
select l).ToList(); //grab data and resolve to list or array

var orderedByIDList = from k in results
join l in myList
on k equals l.Id
select l; //result type IEnumerable<Video>

答案 1 :(得分:1)

这是我的替代尝试(可能没有连接速度快),它会检索最小的行集,然后在本地对数据进行排序。

var results = new List<int>{ 9, 2, 3, 6, 8 };

// record the original order
var results2 = results.Select ((r, index) => new {r, index});

// get results and convert to list
var videos = dataContext.Videos.Where(v => results.Contains(v.Id)).ToList();

// order according to results order
var ordered = videos.Select (v => 
    new {v, results2.Single (r => r.r == v.Id).index})
    .OrderBy (v => v.index).Select (v => v.v)