在Linq中执行优先级查询

时间:2012-08-27 07:10:51

标签: c# linq-to-sql

我在数据库中有这个表:

http://screencast.com/t/aT2uM5p0

我的列表优先级包含优先级图像的ID。我需要执行查询以获取此表中的所有图像,按添加日期排序,带有优先级列表中的ID的图像必须在查询和按日期添加到列表后位于列表顶部。

例如:如果我在数据库图像中有id:1,2,3,4,5,按此顺序添加到数据库,并且我有id的优先级列表:3,5。所以我需要按此顺序获取图像列表:3,5,1,2,4

1 个答案:

答案 0 :(得分:1)

这是一种方法。

如果我假设您有两个名为images的列表(已经以“非优先级”方式排序)和priorityIds,那么这可能对您有用:

var sortMap =
    priorityIds
        .Select((x, n) => new { x, n })
        .ToDictionary(xn => xn.x, xn => xn.n);

Func<int, int> sortFunc = n =>
{
    if (sortMap.ContainsKey(n))
    {
        return sortMap[n];
    }
    return int.MaxValue;
};

var query =
    from i in images
    orderby sortFunc(i.Id)
    select i;

运行query的结果可以为您提供所需的排序。使用字典也应该很快。