2011-07-22 15 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

あなたがエラーを取得している:あなたのFruitsエンティティはナビゲーションプロパティFruitChangeHistoriesている場合

あなたが行うことができます(FruitChangeHistory以来、それはそれが必要のように聞こえる、FruitへのFKを持っていますか)?そして、「最新の変更日」を取得するためにクエリで '下降 'を使用することを意味しましたか? –

+0

申し訳ありませんが、私はさらに説明する必要がありました。エラーなし - 異なる日付の果物レコードが重複しています。はい、私は降順を使用しています。乾杯 – baron

答えて

1

何かが:あなたが/ Entity FrameworkのとSQLにはないLINQのエンティティへのLINQを使用しているよう

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

ですね。

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() 
}