使用最新的稳定NHibernate,我有以下查询:
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的查询。据我所知,这是不应该发生的。这发生在我开始根据状态和排序枚举进行过滤的时候:
if (req.Sort == Sort.Newest)
{
promotions = promotions.OrderBy(p => p.Created);
}如果我在这里调试,我看到它得到了IsHead == false的提升。
发布于 2013-03-15 15:40:05
仅筛选未提交的促销的IsHead == true,因此提交的促销可以具有IsHead = false
我看到的其他问题
if (req.Sort == Sort.Newest)应该是Sort.Oldeshttps://stackoverflow.com/questions/15423527
复制相似问题