Linq to Entities的联盟订单

时间:2011-05-03 13:58:52

标签: c# linq entity-framework linq-to-entities

我对EDM模型联盟选择有问题。 我在db with uniqe Ids中有记录。例如id列表: 1,2,3,4,5,6,7,8,9

例如,我需要选择记录#6之前的#6和2记录以及#6之后的2记录。 在选择结果中,它应该是4,5,6,7,8

我接下来做了这个:

public IQueryable<photos> GetNextPrev(Int64 photoid, string userlogin)
    {
        var p1 = (from m in db.photos
                 where m.id < photoid && m.userlogin == userlogin
                 orderby m.id descending
                 select m).Take(2).Skip(0);
        var p2 = (from m in db.photos
                  where m.id >= photoid && m.userlogin == userlogin
                  orderby m.id descending
                  select m).Take(3).Skip(0);
        return (p1.Union(p2));
    }

但是顺序与示例中的不同......

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这是因为后者的联盟,你无法保证订单。你想在回归时这样做:

return (p1.Union(p2).OrderByDescending(m => m.id));

<强>更新

通过进一步了解这些问题,我认为这将解决这个问题:

public IQueryable<photos> GetNextPrev(Int64 photoid, string userlogin)
{
    var p1 = (from m in db.photos
             where m.id < photoid && m.userlogin == userlogin
             orderby m.id descending
             select m).Take(2).Skip(0);
    var p2 = (from m in db.photos
              where m.id >= photoid && m.userlogin == userlogin
              orderby m.id 
              select m).Take(3).Skip(0);
    return (p1.Union(p2).OrderBy(m => m.id));
}

答案 1 :(得分:2)

您不能假设任何订购。如果你想要订购的东西,你总是需要一个OrderBy。

return p1.Union(p2).OrderBy(p=> p.id);