时间: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;}
}
我需要做的是按照以下条件按价格查询文章:
如果商品打折,则取促销价,如果没有,则取正常价。
举个例子:
- 文章 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);
但它没有给出预期的结果。
感谢任何帮助。
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);
我有一个具有以下结构的 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);
但它没有给出预期的结果。
感谢任何帮助。
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);