2009-08-25 4 views
2

Hallo, wie machst du Joins in Linq zu SQL?Wie funktioniert die Verknüpfung von linq mit sql?

Ich sehe sie haben das Schlüsselwort Join und Gruppe beitreten, aber welche Art von Joins sind sie?

Links, Rechts, Kreuz, Innen?

Wie wähle ich auch bestimmte Spalten, wenn ich fertig bin?

Wie

Select Column1, Spalte2
Aus Tabelle A;

Entweder Abfrage oder Methodensyntax ist in Ordnung. Ich kann immer noch nicht entscheiden, was mir besser gefällt, jeder scheint seine Pluspunkte zu haben.

Antwort

4

Als ersten Schritt würde ich definitiv empfehlen, Scott Guthries exzellentes Using Linq-to-SQL Tutorial zu lesen. Es deckt viele dieser Linq-zu-SQL-Grundlagen ab.

Überprüfen Sie auch die Hooked on LINQ 5 minute overview - wie dort erwähnt, oft in Linq-to-SQL, müssen Sie wirklich nicht selbst JOINs selbst auszudrücken - LINQ-to-SQL behandelt eine Menge von denen für Sie direkt durch Aussetzen Entitätsreferenzen und Entitätssatzreferenzen.

Wenn Sie dann schlussfolgern, dass Sie wirklich eine explizite JOIN verwenden müssen, zeigt Bilal Haidar schön, wie man eine explicit LEFT OUTER JOIN in seinem Blogpost macht.

Die „normale“ Fall eines Innen ist relativ einfach JOIN - Sie fügen Sie einfach einen

from c in customers 
    join o in orders on o.customerid equals c.customerid 

auf Ihre Anfrage.

Für die Auswahl einzelner Felder - siehe Scott Guthries Intro-Artikelserie - erklärt er das sehr detailliert!

Grundsätzlich können Sie eine von drei Dinge tun:

  • eine ganze Einheit wählen (wie ein Kunde) und wieder alle Informationen für sie
  • einige Felder in einem neuen vorhandenen Typ wählen (zB „Customer“ Typ)
  • einige Felder in einen neuen anonymen Typ wählen

Dies würde alle Kunden auswählen, die einen Auftrag haben:

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select c; 

Dies würde alle Kunden und Aufträge in einen neuen „Customer“ Typen auswählen, die irgendwo in Ihrem Projekt ist bereits vorhanden:

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select new CustomerOrder { CustomerName = c.Name, 
           CustomerID = c.CustomerId, 
           OrderDate = o.OrderDate, ...... } ; 

Dies würde die Kundennummer und Bestelldatum in einen neuen, anonymen Typen wählen Sie zu verwenden:

from c in customers 
     join o in orders on o.customerid equals c.customerid 
     select new { CustomerID = c.CustomerId, OrderDate = o.OrderDate } ; 

Es ist ein starker Typ - und es gibt ein vollwertiges .NET CLR-Typ hinter diesem - man seinen Namen nicht :-) nur wissen Aber Sie diese Elemente in Code verwenden können, Sie erhalten Intellisense und alle - ausgezeichnet für eine schnelle temporäre Manipulation einiger Daten.

Marc

+0

In Ihrem Codebeispiel müssen Sie das Schlüsselwort "equals" statt "=" verwenden (der Zuweisungsoperator) oder sogar "==" (der Gleichheitsoperator). –

+0

Ups - danke, Lance !! Ich kann mich einfach nicht daran gewöhnen, irgendwie ... –

+0

Danke für die Beispiele, Ya I know Diese Joins sollten weniger sein, aber ich war in dieser Situation und vielleicht könntest du es ohne Join machen, aber ich weiß nicht wie, was passiert ist PK- und FK-Beziehung. Ich möchte die PK-Tabelle basierend auf einer where-Klausel zuerst filtern. Nachdem ich ein paar Felder von der FK Tabelle basierend auf den Filterergebnissen bekommen habe, die ich von der PK Tabelle hatte. Ich war jedoch unsicher, wie man die Datenbank zusammenführt und zurückgibt. – chobo2

0

Schauen Sie sich im MSDN-Artikel auf LINQ to SQL-Joins: http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic12

Ein Join in LINQ ist eine innere Verknüpfung.

Ein Gruppenbeitritt in LINQ ist ein Join, der eine in-Klausel hat. Die Elterninformationen werden mit Gruppen der Kindinformationen verknüpft. Das heißt, die Kindinformationen werden zu einer Sammlung zusammengefasst und die Elterninformationen der Kindsammlung werden nur einmal angezeigt.

0

Das Join-Schlüsselwort in LINQ gibt Ihnen einen inneren Join. Sie können Ihre Ergebnisse "projizieren", indem Sie in Ihrer SELECT-Klausel ein neues Objekt erstellen. Dieses Objekt kann getippt oder anonym sein. Hier ein Beispiel:

var ordersAndProducts = from o in orders 
    join p in products on o.ProductId equals p.ProductId 
    select new { OrderDate = o.OrderDate, ProductName = p.Name }; 

Diese Abfrage hat eine innere auf die Aufträge und Produkte Kollektionen auf dem ProductId Eigentum beizutreten. Jedes Element in der resultierenden Sammlung wird in ein anonymes Objekt projiziert (neue {..Liste der Eigenschaften/Werte ...} erstellt ein Objekt im laufenden Betrieb.

Wenn Sie LINQ to SQL verwenden (und es sieht wie Sie aus()) Sie können die SELECT-Anweisung sehen, die an Ihre Datenbank gesendet wird, indem Sie entweder Ihre Anwendung debuggen oder den Profiler in Ihrer Datenbank ausführen

Verwandte Themen