2010-12-29 2 views
4

私はこの問題について最善の方法を知りません。単純にLINQクエリは簡単ですが、ここで最も効率的な方法を探しています。LINQで2つのリストに参加しますか?

私は2つのテーブル、スライダとSliderItemを持っています。 SliderItemsにはSliders Idを指すFKがあります。

私はこのような特定のスライダーに関する情報を取得されています:

public static List<Slider> GetSlider(Slider sItem) 
    { 
     DBContext db = new DBContext(); 

     if (sItem.Id != Guid.Empty) 
     { 
      var list = from tbl in db.Sliders 
         where tbl.Id == sItem.Id 
         orderby tbl.Id 
         select tbl; 

      return list.ToList(); 
     } 
    } 

だから私は私のホーム・ページのために何をする必要があるか、私はデータリストの中に詰め込むしたいデータのセットを引き戻すです。これにより、スライダ+スライダアイテムが結合されます。

JOIN文で通常のLINQクエリを実行して、それらをデータリストに戻す汎用リストに投げるだけですか?

どのような思考や方向性があります。

+0

あなたはあなたが提案したjoinでlinqを投稿できますか?私はあなたが妥当なクエリを提供すれば、ほとんどの場合linqが十分だと思います。また、ご質問の方法は最後に1回の返品が欠けますので、ご修正ください。 – xandy

+0

@pixelmouse> http://stackoverflow.com/q/4408584/17447これはあなたが欲しいものですか? – naveen

答えて

0

これは問題はないようですが、ASP.Netとして質問にタグを付けました。私の質問は、このリストの大きさとこのページの表示頻度です。

頻繁に表示していて大きすぎない場合は、スライダテーブルをメモリにプルしてからDBを使わずにクエリを実行します。

可能であれば、できる限りスライダとスライダアイテムの全体をキャッシュします。

あなたのアプリに合っていれば、最近使用したキャッシュをキャッシュしても、DBをヒットする必要はなく、親子関係の最適化よりもパフォーマンスが向上します。私はあなたがデータベースにインデックスtbl.Idを持っていると仮定しますか?

0

私はあなたが参加でLinqクエリを使用し、リストにデータを入れることをお勧めします。それはあなたのためにうまくいく。

1

データベースがすでに適所にスライダーとSliderItems間の外部キー関係を持っており、あなたのLINQツーSQLモデルは両方スライダーとSliderItemsが含まれている場合、自動的にスライダーを検索すると、すべての関連SliderItemsを取得した場合:

public static IEnumerable<SliderItems> GetSliderItems(Guid sliderId) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     Slider result = dc.Sliders.Single(s => s.Id == sliderId); 

     return result.SliderItems; 
    } 
} 
関連する問題