时间:2019-03-08 标签:c#conditionalOrderBy

c# conditional OrderBy

我有一个具有以下结构的 Article 实体

public class Article
{
    public decimal Price {get;set;}
    public decimal? SalePrice {get;set;}
    public bool OnSale {get;set;}
}

我需要做的是按照以下条件按价格查询文章: 如果商品打折,则取促销价,如果没有,则取正常价。

举个例子:

按价格排序时,顺序应为

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

但它没有给出预期的结果。

感谢任何帮助。

if两边是同一个变量? (并且不是上面 class 中的变量)。
不应该是:

articlesQuery = articlesQuery.OrderBy(m => m.OnSale ? m.SalePrice: m.Price);

您可以在 Article 上使用额外的只读 属性 来执行此操作,以使代码更易于阅读:

public class Article
{
    public decimal NormalPrice { get; set; }
    public decimal? SalePrice { get; set; }
    public bool OnSale { get; set; }

    public decimal Price
    {
        get
        {
            if (this.OnSale)
            {
                return this.SalePrice.Value;
            }
            else
            {
                return this.NormalPrice;
            }
        }
    }
}

并使用它:

IQueryable<Article> articlesQuery = dal.Where<Article>(m => m.Active);
articlesQuery = articlesQuery.OrderBy(m => m.Price);