2016-07-11 6 views
0

だから、ヘッドバンギングの多いように感じたものをした後、私はこのクエリを持っている:このLINQクエリに結合を追加しますか?

var widgets = db.Updates 
     .Where(c => c.Sold.Equals(false)) 
     .GroupBy(c => c.widgetType)  
    .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList(); 
    widgetGrid.DataSource = widgets; 
    widgetGrid.DataBind(); 

今、私は私が参加追加する必要があり、すべての販売のウィジェットを持っていること、のは、私が参加したいと例えばましょう所有者のIDの「所有者」テーブルがウィジェットのIDと等しくなり、Owner.NameとWidget.Styleを選択します。

私の人生にとって、私はどこも速くなりません...誰ですか?

いつものように...私は自分のクモの巣を取り除くのを助けることに誰の時間にも深く感謝しています。あなたがこれを行うことができ

+0

はこのEntityFrameworkですか?また、表の定義を示してください。これがEntityFrameworkの場合、あなたのDbSetにウィジェット用のオーナーのリストを設定して、db.Owners.Include(x => x.Updates)を持つことになります。 – Dispersia

答えて

0

を、次の2つの配列を有する:

  • ウィジェットのシーケンスを、各ウィジェットはプロパティIDを持ちます。
  • あなたはそれぞれの所有者にID
  • 性質を持っている所有者のシーケンス、

を持っていて、一致するidを持つ配列と、所有者の組み合わせをしたいです。

ちなみに、あなたのウィジェットにはownerIdがあるか、所有者にwidgetIdがありますが、それは解決策には影響しません。

ザ・は次のようになります参加:

var joinedTable = widgets.join(owners, // join table widgets with table owners 
    w => w.Id     // from widgets take the Id 
    o => o.Id     // from owners also take the Id 
    (widget, owner) => new // where those Ids match, take the owner and the widget 
    {       // and take the properties you want 
     Id = widget.Id, 
     MyXProperty = owner.X, 
     MyYProperty = widget.Y, 

     Widget = widget,  // or take the complete widget and owner 
     Owner = owner, 
    }); 

ところで、あなたは「今、私はすべての販売のウィジェットを持っていることを」書きます。あなたのコードから、私は各アップデートがブールプロパティSoldを持っていることを理解しています。私はあなたが販売されていないアイテムで終わると思いますか?

where句での述語の利点は何ですか?それはなぜですか:

var widgets = db.Updates.Where(c => !c.Sold) 
    .GroupBy // etc. 
0

var widgets = db.Updates 
     .Where(c => !c.Sold) 
     .GroupBy(c => c.widgetType)  
     .Select(x => x.OrderByDescending(y => y.TimeStamp).FirstOrDefault()); 

var result= (from w in widgets 
      join o in db.Owners on w.OwnerId equals o.Id 
      select new {o.Name, w.Style}).ToList(); 
+0

私を助けるために時間を取るのに十分親切だった皆に非常に非常に感謝します!私はすべての答えがうまくいくと信じています。構文のいくつかは私にはもっと意味があり、パフォーマンスの違いもありますが、いずれにしても皆さんにとても感謝しています! – PaulBinCT2

0

をあなたも試してください:私が正しくあなたを理解していれば

var widgets = db.Updates 
     .Where(c => c.Sold.Equals(false)) 
     .GroupBy(c => c.widgetType)  
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()) 
     .Join(db.Owners, 
      u => u.ID, 
      o => o.ID, 
      (u, o) => new { o.Name, u.Style }).ToList(); 
関連する問題