【发布时间】:2015-12-10 11:28:52
【问题描述】:
我有一个 Article 具有以下结构的实体
public class Article
{
public decimal Price {get;set;}
public decimal? SalePrice {get;set;}
public bool OnSale {get;set;}
}
我需要做的是通过以下条件按价格查询文章: 如果商品在打折,则以销售价格为准,如果没有,则以正常价格为准。
举个例子:
- A 条(OnSale = True,Price = 10,SalePrice = 5)
- B 条(ONSale = False,Price = 4,SalePrice = NULL)
- C 条(OnSale = False,Price = 22,SalePrice = 10)
按价格订购时,顺序应为
B(价格4)
A(价格 5) - 因为它是销售价格
C(价格 22)
我试过了
IQueryable<Article> articlesQuery = dal.Where<Article>(m => m.Active);
articlesQuery = articlesQuery.OrderBy(m => m.OnSale ? m.PriceSale : m.PriceSale);
但它没有给出想要的结果。
感谢任何帮助。
【问题讨论】:
-
为什么你在 lambda 中使用了两次
PriceSale? -
除了提到和解决的问题,我不认为用文章存储价格是一个很好的设计,原因有很多。为什么不引入 ArticlePrice 和
public ICollection<ArticlePrice> ArticlePrices { get; set; }属性?一个价格只能在一段时间内有效,并且可以有多个重叠销售。然后可以在ArticlePrice注册某个价格是促销价还是一次性折扣。
标签: c# linq linq-to-sql lambda