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
In Ihrem Codebeispiel müssen Sie das Schlüsselwort "equals" statt "=" verwenden (der Zuweisungsoperator) oder sogar "==" (der Gleichheitsoperator). –
Ups - danke, Lance !! Ich kann mich einfach nicht daran gewöhnen, irgendwie ... –
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