我正在进行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;
但这很慢,我需要更快的东西。
答案 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)