首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有多个子句的NHibernate Linq获取不需要的数据

带有多个子句的NHibernate Linq获取不需要的数据
EN

Stack Overflow用户
提问于 2013-03-15 10:06:11
回答 1查看 142关注 0票数 0

使用最新的稳定NHibernate,我有以下查询:

代码语言:javascript
复制
   private void Index(PromotionsRequest req)
    {
        PropertyBag["CurrentYear"] = DateTime.Today.Year;
        PropertyBag["CurrentManager"] = CurrentManager;
        IQueryable<Promotion> promotions;
        int totalPromotions;
        if (req.Commited)
            totalPromotions = NHibernateSession.Query<CommitedPromotion>().Where(p => p.IsHead == true).Count();
        else
            totalPromotions = NHibernateSession.Query<StagedPromotion>().Where(p => p.IsHead == true).Count();
        var totalPages = totalPromotions / maxpages;
        if (totalPages == 0)
            totalPages = 1;
        if (0 == totalPromotions % maxpages)
            totalPages++;
        var currentpage = req.Page;
        var numbers = new List<int>();
        for (int i = 1; i <= totalPages; i++)
            numbers.Add(i);
        var chunkednumbers = Chunk(numbers, maxpages);
        numbers = chunkednumbers.Single(p => p.Contains(currentpage)).ToList();
        if (req.Commited)
            promotions = NHibernateSession.Query<CommitedPromotion>().Where(p => p.IsHead == true).Cast<Promotion>();
        else
            promotions = NHibernateSession.Query<StagedPromotion>().Where(p => p.IsHead == true).Cast<Promotion>();
        //
        if (req.Status == Status.Active)
        {
            promotions = promotions.Where(p => p.From < DateTime.Now && p.To > DateTime.Now);
        }
        else
            if (req.Status == Status.Expired)
            {
                promotions = promotions.Where(p => p.To < DateTime.Now);
            }
            else
                if (req.Status == Status.Unstarted)
                {
                    promotions = promotions.Where(p => p.From > DateTime.Now);
                }
        //
        if (req.Commited)
        {
            if (req.Sort == Sort.Newest)
            {
                promotions = promotions.OrderBy(p => p.Created);
            }
            else
                if (req.Sort == Sort.Newest)
                {
                    promotions = promotions.OrderByDescending(p => p.Created);
                }
                else
                    if (req.Sort == Sort.Modified)
                    {
                        promotions = promotions.OrderBy(p => p.Modified);
                    }
        }
        //
        promotions = promotions
              .Skip(itemsperpage * (currentpage - 1))
              .Take(itemsperpage);
        var promotionsCreated = NHibernateSession.Query<Manager>().Select(p => p.PromotionsCreated).Sum();

        PropertyBag["PromotionsResponse"] = this.listbinder.GetListOfPromotionsFrom(promotions, currentpage, totalPages, totalPromotions, promotionsCreated, req.Sort, req.Status, numbers);
    }

根据req.Commited是否为true,此查询将获取CommitedPromotion类型或StagedPromotion类型的实例。基类Promotion有一个属性IsHead,我用它来过滤它们。在这种情况下,我只想要IsHead ==为真的促销。问题出在哪里?此查询甚至会返回IsHead ==为false的查询。据我所知,这是不应该发生的。这发生在我开始根据状态和排序枚举进行过滤的时候:

代码语言:javascript
复制
  if (req.Sort == Sort.Newest)
                {
                    promotions = promotions.OrderBy(p => p.Created);
                }

如果我在这里调试,我看到它得到了IsHead == false的提升。

EN

回答 1

Stack Overflow用户

发布于 2013-03-15 15:40:05

仅筛选未提交的促销的IsHead == true,因此提交的促销可以具有IsHead = false

我看到的其他问题

  • 第二个if (req.Sort == Sort.Newest)应该是Sort.Oldes
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15423527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档