2010-09-07 4 views
0

J'ai trois tables que je voudrais interroger: Streams, entrées et FieldInstances. Je veux obtenir une liste d'entrées à l'intérieur d'un flux. Je veux obtenir une liste d'entrées dans un flux. Un flux peut être un blog ou une page etc. et l'entrée est l'instance réelle du flux, c'est-à-dire: "flux: entrée de page: Bienvenue" ou "flux: entrée de blog: nouvelles sur quelque chose". Le fait est que chaque entrée a un champ de données personnalisé associé à FieldInstance. IE:Comment puis-je utiliser linqTOsql pour obtenir efficacement des listes imbriquées?

flux

: entrée Page : Bienvenue fieldInstance: Bienvenue Chemin de l'image

J'essaie de trouver la meilleure façon d'obtenir une liste de toutes les entrées à l'intérieur d'un cours d'eau et aussi avoir les instances de champ personnalisées associées à chaque entrée.

Je joue autour avec le code comme ceci:

var stream = genesisRepository.Streams.First(x => x.StreamUrl == streamUrl); 
IQueryable<StreamEntry> entry = genesisRepository.StreamEntries.Where(x => x.StreamID == stream.StreamID); 
IQueryable<FieldInstance> fieldInstances = genesisRepository.FieldInstances.Where(
      // doesn't work because entry is basically returning a collection of some kind. 
      // and i can't figure out how to compare a single ID with a list/collection of IDs 
      x => x.fiStreamEntryID == entry.Where(e => e.StreamID == stream.StreamID) 
     ); 

Bien sûr, ne fonctionne pas. Initialement, je pensais obtenir toutes les entrées dans le flux et ensuite toutes les fieldInstances dans le flux, puis je vais afficher les données en utilisant lambdas après avoir tout ... j'espère que les requêtes sql dows à deux ou trois. Mais je n'arrive pas à comprendre comment écrire linqTOsql à exécuter en deux ou trois requêtes. Je continue à penser que j'ai besoin d'exécuter des requêtes dans une boucle pour obtenir les fieldInstances pour chaque entrée.

Y at-il une requête LinqTOsql qui sélectionnera toutes les fieldInstances dans lesquelles StreamEntryID (fk) se trouve dans la liste des entrées dont (fk) StreamID correspond au Stream?

Répondre

1

Désolé, je ne suis pas tout à fait ce que les colonnes que vous adhérez dans la troisième déclaration, mais:

var stream = genesisRepository.Streams.First(x => x.StreamUrl == streamUrl); 
IQueryable<StreamEntry> entries = genesisRepository.StreamEntries.Where(x => x.StreamID == stream.StreamID); 
IQueryable<FieldInstance> fieldInstances = from entry in entries 
    from instance in genesisRepository.FieldInstances 
    where entry.entryId == instance.fiStreamEntryID 
    select instance; 
+0

OOh ... ça a l'air cool. Je vais jouer avec. – quakkels

+0

Il compile ... Yay! Je veux juste m'assurer que ça rend ce que j'attendais. – quakkels

0

Est-ce que cela aide? Je suis encore nouveau pour EF mais comment j'aurais une fissure à elle ...

var results = genesisRepository.FieldInstances 
    .Include("StreamEntry.Stream") 
    .Where(fi => fi.StreamEntry.Stream.StreamUrl == streamUrl); 
Questions connexes