2012-12-02 74 views
0

我有一個表,其中包含各種燃料類型的燃料價格數據。 每行都有一個ID,日期,並有5列不同的燃料類型。 我無法提出一個linq查詢來確定每個燃料類型的數據的最後一行的日期,其中值不是0(如果插入了一行並且沒有燃料價格可用於特定燃料類型,則該值插入該燃料類型爲零,因爲單元格不可爲空)。從表中獲取最新日期使用LINQ

我試過使用LastorDefault,但不會工作,因爲有時特定類型的最後日期不是在表中的最後一行。

+1

您的主鍵是否是自動生成的(例如標識列)?您可以通過主鍵DESC排序,然後使用.FirstOrDefault() –

+0

Rui,這是我之前想到的文章,但感謝您的評論 – dinotom

回答

0

可能爲它設備linq(和SQL)查詢。但是用一種爲規範化結構制定的語言來處理非規範化的東西通常會變成一堆重複的嵌套語句(以及不太有效的查詢計劃)。您將有反覆,無論如何,所以我讓他們儘可能簡單,通過使用常規的foreach:

var result = new FuelPriceSummary(); 
foreach(var price in context.FuelPriceData.OrderBy(p => p.Date).ToList()) 
{ 
    if (price.Price1 > 0) 
     {result.Price1 = price.Price1; result.Date1 = price.date;} 
    if (price.Price2 > 0) 
     {result.Price2 = price.Price2; result.Date2 = price.date;} 
    if (price.Price3 > 0) 
     {result.Price3 = price.Price3; result.Date3 = price.date;} 
    if (price.Price4 > 0) 
     {result.Price4 = price.Price4; result.Date4 = price.date;} 
    if (price.Price5 > 0) 
     {result.Price5 = price.Price5; result.Date5 = price.date;} 
} 

如果可以,規範化數據庫設計。它將使查詢變得更容易。