按 entity framework 中的两个不同字段排序结果

Order results by two differents fields in entity framework

我有广告table,我想先按特殊顺序订购,然后按最后添加顺序订购,但特殊广告有结束日期,所以我想订购特殊广告,它的日期仍然是

这是我的代码

List<S_Advertisements> moduleItems = db.S_Advertisements
       .Include(x => x.S_AdvertisementsImages)
       .Where(x => x.CatId == pureId && x.IsActive == true)
       .OrderByDescending(x => x.IsSpecial)
       .ThenByDescending(x => x.AdId).ToList();

我想知道 Entity Framework 是否会让我做这样的事情:

List<S_Advertisements> moduleItems = db.S_Advertisements
       .Include(x => x.S_AdvertisementsImages)
       .Where(x => x.CatId == pureId && x.IsActive == true)
       .OrderByDescending(x => x.IsSpecial.Where(x => x.DateSpecialEnd > DateTime.Now))
       .ThenByDescending(x => x.AdId).ToList();

where 子句的放置不影响排序。无论您按 IsSpecial 还是按 IsSpecial.Where(...) 订购,顺序都是相同的。这就是为什么您正在寻找的东西不存在的原因:没有必要。

可能是:

DateTime dtn = Datetime.Now;
var moduleItems = db.S_Advertisements
   .Include(x => x.S_AdvertisementsImages)
   .Where(x => x.CatId == pureId && x.IsActive == true)
   .Select( x => new {
        o = x,
        c = x.DateSpecialEnd > dtn ? 0 : 1 // not a boolean but an order info
   })
   .OrderByDescending(z => z.c)
   .ThenByDescending(z => z.o.AdId).ToList();

同sql:计算字段的视图,然后对视图进行排序。