2010-08-23 5 views
3

clause WHERE Disons que j'ai ces deux tables:Besoin d'aide avec LINQ to SQL sur la table étrangère

ParentDataItem 
    ParentDataItemID 
    ...some other fields... 

ChildDataItem 
    ChildDataItemID 
    ParentDataItemID (foreign key) 
    Name 
    Value 

Maintenant, je veux choisir les ParentDataItems qui ont un ChildDataItem avec un nom spécifié et la valeur.

Je sais que j'étais loin avec ma première approche, ce qui était quelque chose comme:

// db is the data context object 
db.ParentDataItems.Where(p => p.ChildDataItems.Where(c => c.Name == "XXX" && c.Value == "XXX")); 

Je préfère la syntaxe lambda, mais soit le ferait.

Répondre

3

S'il y a déjà une relation entre eux (parce que vous définissez un dans le concepteur par exemple), vous devez simplement être en mesure de le faire:

var foo = db.ParentDataItems.Where(p => p.ChildDataItems.Any(c => c.Name == "value"); 

qui va obtenir tous les éléments de données parents qui ont des enfants avec un nom correspondant à "valeur".

Sinon, vous devrez joindre les deux tables manuellement (qui ressemble un peu plus horrible dans la syntaxe lambda):

var foo = db.ParentDataItems.Join(db.ChildDataItems.Where(c => c.Name == "value"), 
            p => p.ChildDataItemId, 
            c => c.ParentDataItemId, 
            (parent, child) => parent); 
3

Utilisation de la syntaxe LINQ:

var foo = from p in ctx.Parent 
      join c in ctx.Children on c.ParentDataItemID equals p.ParentDataItemID 
      where c.Name = "Foo" 
      select p; 

Je recommande LINQPad pour la création et l'apprentissage sur les requêtes LINQ.

+0

Merci pour le lien vers LINQPad - je l'ai réellement installé sur l'un des mes machines - je suppose que je pourrais commencer à l'utiliser. – jhorback