繁体   English   中英

Linq 中的联合订单到实体

[英]Union order in Linq to Entities

我对 EDM model Union select 有疑问。 我在 db 中有带有唯一 ID 的记录。 例如 id 列表:1、2、3、4、5、6、7、8、9

例如,我需要 select,在 #6 之前记录 #6 和 2 条记录,在 #6 之后记录 2 条记录。 在 select 结果中它应该是 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));
    }

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

谢谢您的帮助!

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

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

这是因为后者的联盟,你不能保证它的顺序。 您想在返回时执行此操作:

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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM