2010-07-28 17 views
1

Utilisation de deux tables avec une relation un-à-plusieurs (telle que Make -> Model), comment renvoyer un Make avec des enfants Model limités dans une fonction IQueryable? Quand je passe en "camry" comme variable, je veux récupérer une Toyota Make avec seulement des enfants appelés "camry", pas tous les enfants. Au fond, je veux recréer cette instruction SQL:LINQ to Entities - limitation des tables incluses

SELECT 
    MakeName, 
    ModelName 
FROM 
    Make 
    LEFT OUTER JOIN Model ON Model.MakeId = Make.MakeId 
WHERE 
    Model.ModelName = 'camry' 

Jusqu'à présent, la déclaration LINQ ressemblerait à ceci:

return this.ObjectContext.Make 
    .Include("Model") 
    .Where(make => make.Model.ModelName.Equals("camry") 

Ceci est évidemment pas syntaxiquement correct, parce que le .Model dans la clause Where est une collection d'entités et n'a pas de propriété .ModelName.

Comment limiter les tables incluses? Est-ce possible dans LINQ to Entities?

Répondre

1

Notez que ceci est du haut de ma tête, et je ne pas pris la peine de compiler si quelque chose peut-être un peu hors:

return this.ObjectContext.Make.Include("Model") 
    .Where(make => make.Models.Any(model => model.ModelName == "camry")) 

Notez également que je pense que la marque aura « modèles » pas "Modèle"

EDIT:

Je ne l'ai pas bien compris la question. Voici la requête que vous souhaitez:

return this.ObjectContext.Model.Include("Make") 
    .Where(model => model.ModelName == "camry") 
+0

Cela semble revenir tous les modèles aussi longtemps que l'un d'entre eux est appelé « camry », et aucun modèle si aucune On les appelle "camry". – Marcus

+0

@ Marcus, désolé, mal compris la question. Voir ma mise à jour – tster

0

Cela devrait fonctionner également:

from make in ctx.Makes 
from model in make.Models 
where model.Name == "camry" 
select new 
{ 
    Make = make, 
    Model = model 
}