2016-06-23 11 views
1

Hallo dort bin ich auf ein Problem fest und hoffe, jemand kann die Antwort für mich erklären!LINQ Abfrage Entity Framework wie Tabellen beitreten? Navigationseigenschaften?

Also in meiner Datenbank habe ich 3 Tabellen, die wie folgt verbinden:

Customer   CustomerAddress  Address 
-CustomerID  -CustomerID   -AddressID 
-FirstName  -AddressID    -Street 
-LastName        -City 

So erstelle ich meine Entitätsmodell und die mittlere Tabelle (Customer) entfernt und durch Navigationseigenschaften ersetzt?

Also was ich versuche zu tun ist, die Tabellen mit einer LINQ-Abfrage in C# beizutreten. in SQl die Abfrage würde wie folgt aussehen:

Select * 
From dbo.customer as c 
left join dbo.customeraddress as ca on c.customerID = ca.customerID 
left Join dbo.Address as a on a.addressID = ca.addressID 

ich, das ist klar hier nicht der Fall, da es keine Customer Tabelle ist. Benütze ich die Navigationseigenschaften-Spalten, um einen Join zu erstellen? In meinem Modelldiagramm stelle ich fest, dass in der Customer-Klasse/Tabelle eine Navigationseigenschaft mit dem Namen Adressen vorhanden ist, die der Address-Klassen-/Tabelleneigenschaft namens Kunden zuzuordnen scheint.

Also habe ich versucht, dies:

var customerQuery = (from customer in db.Customers 
        join address in db.Addresses on customer.Addresses equals address.Customers into add 
        from rt2 in add.DefaultIfEmpty() 
        select new { //.. }); 

Aber das ist offensichtlich falsch, denn ich bin nicht sicher, was mit den Navigationseigenschaften zu tun, um sie zu verbinden. Ich würde es sehr schätzen, wenn mir jemand erklären könnte, wie ich mich diesem Modell anschließe!

+0

Warum nicht trotzdem eine Tabelle erstellen? Aber um klar zu sein, möchten Sie sich ihnen anschließen, damit Sie aus den verbundenen Tabellen auswählen können? – Niklas

Antwort

1

Wenn Sie Navigationseigenschaften haben, verwenden Sie sie einfach in Ihren Abfragen, wie Sie es tun würden, wenn sie Objekte wären - es gibt keine Notwendigkeit, Joins zu verwenden, EF erstellt sie für Sie.

Zum Beispiel Ihre Abfrage würde so aussehen:

var customerQuery = (from customer in db.Customers 
        from address in customer.Addresses.DefaultIfEmpty() 
        select new { //.. }); 

Diese left outer join für Sie generiert. Wenn Sie inner join möchten, entfernen Sie DefaultIfEmpty().

+1

Vielen Dank das ist genau das, was ich wollte! – 7q9l4n1d

+0

Was ist, wenn die Beziehung zwischen Kunde und Adresse 1: 1 ist? Die DefaultIfEmpty-Methode ist dann nicht verfügbar. –

+0

Ich denke, ich habe es herausgefunden. Es würde aussehen wie "db.Customers.Where (c => c.Address) .DefaultIfEmpty();" –

Verwandte Themen