c#条件OrderBy

时间:2015-12-10 11:28:53

标签: c# linq linq-to-sql lambda

我有一个Article实体,其结构如下

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

我需要做的是按照以下标准按价格查询文章: 如果文章正在销售中,请按照销售价格,如果没有,请按正常价格购买。

举个例子:

  • A条(OnSale = True,价格= 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);

但它没有给出理想的结果。

感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

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

{{#regex:lorem (ipsum, dolor).jpg, lorem (ipsum) (dolor).JPG, lorem.png|/(png{{!}}bmp{{!}}jp?g),/i| $1 \$ }}

答案 1 :(得分:0)

您可以使用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);