2010-12-29 2 views
4

Je ne suis pas sûr de la meilleure façon de s'y prendre. Les requêtes simplement LINQ sont assez faciles pour moi, mais je cherche le moyen le plus efficace ici.Joining 2 Listes avec LINQ?

J'ai 2 tables, Sliders et SliderItems. Les SliderItems ont un FK qui pointe vers l'ID Sliders.

Je reçois des informations sur un curseur particulier comme celui-ci:

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

Alors ce que je dois faire pour ma page d'accueil est de tirer en arrière un ensemble de données que je veux fourrer dans une liste de données. En combinant les Slider + SliderItems qui vont avec. Est-ce que je fais juste une requête LINQ normale avec une instruction JOIN et les jette dans une liste générique qui retourne à ma liste de données?

Appréciez toutes les pensées et la direction.

+0

pouvez-vous poster le linq avec join que vous suggérez? Je pense que la plupart du temps linq est assez bon si vous fournissez une requête raisonnable. de plus, la méthode de votre question manque d'un retour à la fin, merci de la modifier. – xandy

+0

@pixelmouse> http://stackoverflow.com/q/4408584/17447 est-ce que vous voulez? – naveen

Répondre

0

Cela semble correct, mais vous avez étiqueté votre question comme ASP.Net. Ma question est la suivante: quelle est la taille de cette liste et à quelle fréquence affichez-vous cette page?

Si vous l'affichez souvent et qu'il n'est pas trop grand, je tirerais la table coulissante en mémoire, puis j'exécuterais votre requête sans toucher à la BD.

En fait, si possible, vous devriez mettre en cache l'ensemble du slider et des slideritems si vous le pouvez. Même si vous mettez en cache le dernier élément utilisé si cela a du sens pour votre application, ne pas avoir à toucher la base de données vous donnera une meilleure performance que d'optimiser ce qui semble être une relation parent/enfant très triviale. Je suppose que vous avez un index dans la base de données vers le bas tbl.Id?

0

Je suggère que vous pouvez utiliser Linq query avec join et mettre les données dans la liste. Cela fonctionne bien pour vous.

1

Si votre base de données a déjà la relation de clé étrangère entre Sliders et SliderItems en place et si votre modèle LINQ to SQL inclut les Sliders et SliderItems, puis la recherche d'un curseur récupère automatiquement tous les SliderItems liés:

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

     return result.SliderItems; 
    } 
}