1

我正在做一个 LINQ 查询,我从表 Videos 中选择视频信息。该查询仅选择 ID 出现在以下列表中的那些视频:

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

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

我可以这样做:

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

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

4

2 回答 2

6

使用 a 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>
于 2013-03-15T20:15:38.033 回答
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)
于 2013-03-15T20:40:27.473 回答