2011-07-22 161 views
0

我想寫一個稍微複雜的LINQ to SQL查詢。LINQ查詢加入 - 幫助

我有一個表稱爲

Fruit (FruitID, FieldOne, FieldTwo) 

FruitChangeHistory (FruitChangeHIstoryID, FruitID, Date) 

我想要做的就是返回Fruit列表,到視圖。但View模型將包含一個額外的字段LastChangeDate。因此,像:FruitIDFieldOneFieldTwoLastChangedDate

我需要找出如何加入上與fruitid的fruitchangehistory,那麼日期排序,只返回最新的更改日期。

這是我到目前爲止有:

var list = from p in EntityFramework.Fruits 
join h on EntityFramework.FruitChangHistory 
on p.FruitID equals h.FruitID 
orderby h.LastChangedDate ascending 
select new FruitVM 
{ 
FruitID = p.FruitId, 
FieldOne = p.FieldOne, 
FieldTwo = p.FieldTwo, 
LastChangedDate = h.Date 
} 

但計劃沒有完全工作。

任何人都可以幫忙嗎?

+0

你得到一個錯誤?你是否想在查詢中使用「降序」來獲取「最新更改日期」? –

+0

對不起,我應該進一步解釋。沒有錯誤 - 我得到每個日期不同的重複水果記錄。是的,這就是爲什麼我使用降序。乾杯 – baron

回答

1

事情是這樣的:

var list = from p in EntityFramework.Fruits 
     select new FruitVM 
     { 
      FruitID = p.FruitId, 
      FieldOne = p.FieldOne, 
      FieldTwo = p.FieldTwo, 
      LastChangedDate = (from h in EntityFramework.FruitChangHistory 
           where p.FruitID == h.FruitID 
           orderby h.LastChangedDate ascending 
           select h.LastChangedDate).FirstOrDefault() 
     } 
1

這聽起來像你正在使用LINQ到實體/實體框架,而不是LINQ到SQL語句。

如果您Fruits實體有一個導航屬性FruitChangeHistories(這聽起來像它應該,因爲FruitChangeHistory有FK到Fruit),你可以這樣做:

var list = from p in EntityFramework.Fruits 
select new FruitVM() 
{ 
    FruitID = p.FruitId, 
    FieldOne = p.FieldOne, 
    FieldTwo = p.FieldTwo, 
    LastChangedDate = FruitChangeHistories.OrderByDescending(x => x.Date) 
             .FirstOrDefault() 
}