c#有条件的OrderBy

本文关键字:OrderBy 有条件 | 更新日期: 2023-09-27 18:26:16

我有一个具有以下结构的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(ONSales=False,Price=4,SalePrice=NULL)
  • 第C条(OnSale=虚假,价格=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);

但是它没有给出期望的结果。

感谢您的帮助。

c#有条件的OrderBy

if的两边是同一个变量?(不是上述类中的变量)
不应该是:

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