Linq到实体的联盟订单

Evg*_*kiy 5 c# linq linq-to-entities entity-framework

我对EDM模型Union select有问题。我在数据库中有uniqe ID的记录。例如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));
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助!

Adr*_*iro 5

因为后者的联盟,你无法保证它的秩序。您想在返回时执行以下操作:

return (p1.Union(p2).OrderByDescending(m => m.id));
Run Code Online (Sandbox Code Playgroud)

更新

随着对问题的进一步了解,我认为这会解决这个问题:

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));
}
Run Code Online (Sandbox Code Playgroud)