2015-12-10 71 views
0

我有一個Article實體結構如下C#條件排序依據

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

我需要做的是通過以下條件來查詢由他們的價格文章: 如果文章有售,取它的銷售價格,如果不是,拿它的正常價格。

因此,對於一個示例:

  • 第A(OnSale的=真,價格= 10,SalePrice = 5)
  • B條(OnSale的=假,價錢= 4,SalePrice = NULL)
  • C條(OnSale的=假,價錢= 22,SalePrice = 10)

當由價格訂購,順序應該是

乙(對大米4)

A(價格5) - 導致它的銷售價格

C(價格22)

我試着用

IQueryable<Article> articlesQuery = dal.Where<Article>(m => m.Active); 
articlesQuery = articlesQuery.OrderBy(m => m.OnSale ? m.PriceSale : m.PriceSale); 

,但它不會給期望的結果。

任何幫助表示讚賞。

+7

爲什麼在lambda中使用'PriceSale'兩次? –

+0

除了上述和解決的問題,我不認爲這是一個偉大的設計,以多種原因存儲一篇文章的價格。爲什麼不引入ArticlePrice和'公衆ICollection ArticlePrices {get;組; }屬性?只有一個價格在一段時間內有效,並且您可以有多個重疊銷售。然後可以在「ArticlePrice」中註冊某個價格是銷售價格還是一次性折扣。 – CodeCaster

回答

4

if兩邊都是同一個變量嗎? (而不是上述類中的變量)。
豈不是:

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

感謝您的評論。經過漫長的工作一天,我沒有看到這個微不足道的錯誤:)我將設置我的問題被刪除 – Robert

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

這將工作在Linq to SQL? – Robert

+0

不會這樣做。我應該看到你正在使用DAL。 – MrDeveloper