2009-05-27 9 views
1

Je rencontre des problèmes lors de l'interrogation du modèle d'entité pour obtenir des informations supplémentaires.Entity Framework IQueryable

Mon DB a une table de programme avec une relation de un à plusieurs avec une table d'événements. Le modèle Entité génère très bien les relations, mais je n'arrive pas à comprendre comment interroger le modèle pour obtenir l'objet progam avec ses événements.

Je peux le faire:

var foo = from program in entities.ProgramSet 
      where program.StartDate > DateTime.now 
      orderby program.StartDate 
      select program; 

Pas de problème là-bas. De ce que j'ai trouvé sur la page de Microsofts (formant des questions avec l'infrastructure d'entité): msdn.microsoft.com/en-us/library/bb896272.aspx, si je voulais obtenir les objets d'enfant, je fais juste ceci:

// Define a LINQ query with a path that returns 
// orders and items for a contact. 
var contacts = (from contact in context.Contact 
      .Include("SalesOrderHeader.SalesOrderDetail") 
      select contact).FirstOrDefault(); 

Cependant, il n'y a pas .Include ou Include que je peux trouver sur la requête.

Une suggestion? Je sais que je peux faire un foreach à travers les résultats, puis exécuter un .Events.Load() dessus, mais cela ne force pas le résultat IQueriable à exécuter le sql, au lieu de l'opter pour l'exécuter seulement quand un .ToList () etc est appelé?

Voici quelques exemples de code de mon projet:

public class ProgramRepository : CT.Models.IProgramRepository 
{ 
    CTEntities db = new CTEntities(); 

    public IQueryable<Program> FindAllPrograms() 
    { 

     return db.ProgramSet; 
    } 
    public IQueryable<Program> FindUpcomingPrograms() 
    { 

     var programs = from program in FindAllPrograms() 

       where program.StartDate > DateTime.Now 
       orderby program.StartDate         
       select program; 
     return programs; 


    } 

Avec les FindUpComingPrograms je voudrais avoir aussi les événements comprennent les données. Il existe une relation entre le modèle Programme et Événements. Le programme a une propriété List < événements >, que je voudrais remplir et retourner avec la méthode IQueryable.

Merci encore!

+0

n'ont pas travaillé avec l'EF, mais l'appel FirstOrDefault() rendra la requête exécuter quand même. – CSharpAtl

+0

Oui, il va, et je voulais éviter, l'échantillon avec FirstOrDefault() provenait du site Web de Microsoft. – Mike

Répondre

2

La fonction include fait partie de l'objet ObjectQuery ...

Je pense que vous allez avoir besoin de réécrire votre requête pour ressembler à quelque chose comme ceci:

var contacts = context.Contact.Include("SalesOrderHeader.SalesOrderDetail").FirstOrDefault(); 

//Not sure on your dot path you might have to debug that a bit 

Voici un Article qui a quelques exemples ...

+0

Je suppose, ce que je cherche est comment puis-je, dans le cadre de l'Entity Framework, interroger l'ensemble, et obtenir ses enfants liés, de sorte que l'objet va remplir la liste propriété de la classe liée? Et faites-le de la manière qui le rendra comme un IQueriable? Merci – Mike

+0

J'ai également constaté que je peux passer par et utiliser un CreateSourceQuery() pour obtenir les données référencées dont j'ai besoin, ou aller sur le site Web de Microsoft: http://code.msdn.microsoft.com/EFLazyLoading et installer le LazyLoading, de sorte que lorsque j'accède à Program.Events, il va charger les événements ici et là, au lieu de tout de suite. – Mike