2011-02-25 4 views
11

Lorsque je tente de joindre des tablesComment joindre les tables dans EF LINQ

var query = 
    from foo in db.Foos 
    from bar in db.Bars 
    where foo.ID == bar.FooID 
    where foo.ID == 45 
    select bar; 


query.toArray() 

Je reçois cette erreur

Unable to create a constant value of type 'Bar'. Only primitive types ('such as Int32, String, and Guid') are supported in this context. 

Répondre

23

Essayez qu'au lieu:

var query = 
    from foo in db.Foos 
    join bar in db.Bars on foo.ID equals bar.FooID 
    where foo.ID == 45 
    select bar; 

Quoi qu'il en soit, je vous suggère modélisez la relation entre Foo et Bar dans le concepteur EDM, de cette façon vous n'avez pas besoin d'une jointure explicite:

var query = 
    from foo in db.Foos 
    where foo.ID == 45 
    from bar in foo.Bars 
    select bar; 
+0

va modéliser la relation dans le concepteur EDM créer également une clé étrangère dans la base de données? – sgarg

+0

comment le convertir en méthode LINQ? Je n'ai pas idée comment convertir 'de barre dans foo.Bars' en utilisant Method-Based – Willy

+1

@Willy' db.Foos.Where (foo => foo.ID == 45) .SelectMany (foo => foo.Bars) ' –