Wie lautet die Syntax für einen Inner Join in LINQ to SQL?
-
09-06-2019 - |
Frage
Ich schreibe eine LINQ to SQL-Anweisung und bin auf der Suche nach der Standardsyntax für einen normalen Inner Join mit einem ON
Klausel in C#.
Wie stellen Sie Folgendes in LINQ to SQL dar:
select DealerContact.*
from Dealer
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
Lösung
Es geht ungefähr so:
from t1 in db.Table1
join t2 in db.Table2 on t1.field equals t2.field
select new { t1.field2, t2.field3}
Für ein besseres Beispiel wäre es schön, sinnvolle Namen und Felder für Ihre Tabellen zu haben.:) :)
Aktualisieren
Ich denke, für Ihre Anfrage könnte dies passender sein:
var dealercontacts = from contact in DealerContact
join dealer in Dealer on contact.DealerId equals dealer.ID
select contact;
Denn Sie suchen die Kontakte, nicht die Händler.
Andere Tipps
Und weil ich die Ausdruckskettensyntax bevorzuge, sehen Sie hier, wie Sie das damit machen:
var dealerContracts = DealerContact.Join(Dealer,
contact => contact.DealerId,
dealer => dealer.DealerId,
(contact, dealer) => contact);
Um die Syntax der Ausdruckskette zu erweitern Antwort von Clever Human:
Wenn Sie Dinge (z. B. Filtern oder Auswählen) auf Felder aus beiden Tabellen ausführen möchten, die miteinander verbunden werden – und nicht nur auf eine dieser beiden Tabellen – können Sie im Lambda-Ausdruck des letzten Parameters der Join-Methode ein neues Objekt erstellen Einbindung beider Tabellen, zum Beispiel:
var dealerInfo = DealerContact.Join(Dealer,
dc => dc.DealerId,
d => d.DealerId,
(dc, d) => new { DealerContact = dc, Dealer = d })
.Where(dc_d => dc_d.Dealer.FirstName == "Glenn"
&& dc_d.DealerContact.City == "Chicago")
.Select(dc_d => new {
dc_d.Dealer.DealerID,
dc_d.Dealer.FirstName,
dc_d.Dealer.LastName,
dc_d.DealerContact.City,
dc_d.DealerContact.State });
Der interessante Teil ist der Lambda-Ausdruck in Zeile 4 dieses Beispiels:
(dc, d) => new { DealerContact = dc, Dealer = d }
...wo wir ein neues Objekt vom anonymen Typ erstellen, das als Eigenschaften die Datensätze DealerContact und Dealer sowie alle ihre Felder hat.
Wir können dann beim Filtern und Auswählen der Ergebnisse Felder aus diesen Datensätzen verwenden, wie der Rest des Beispiels zeigt, das verwendet dc_d
als Name für das von uns erstellte anonyme Objekt, dessen Eigenschaften sowohl die Datensätze „DealerContact“ als auch „Dealer“ sind.
var results = from c in db.Companies
join cn in db.Countries on c.CountryID equals cn.ID
join ct in db.Cities on c.CityID equals ct.ID
join sect in db.Sectors on c.SectorID equals sect.ID
where (c.CountryID == cn.ID) && (c.CityID == ct.ID) && (c.SectorID == company.SectorID) && (company.SectorID == sect.ID)
select new { country = cn.Name, city = ct.Name, c.ID, c.Name, c.Address1, c.Address2, c.Address3, c.CountryID, c.CityID, c.Region, c.PostCode, c.Telephone, c.Website, c.SectorID, Status = (ContactStatus)c.StatusID, sector = sect.Name };
return results.ToList();
Verwenden Linq Beitreten Operator:
var q = from d in Dealer
join dc in DealerConact on d.DealerID equals dc.DealerID
select dc;
Sie erstellen einen Fremdschlüssel und LINQ-to-SQL erstellt Navigationseigenschaften für Sie.Jede Dealer
wird dann eine Sammlung von haben DealerContacts
die Sie auswählen, filtern und bearbeiten können.
from contact in dealer.DealerContacts select contact
oder
context.Dealers.Select(d => d.DealerContacts)
Wenn Sie keine Navigationseigenschaften verwenden, verpassen Sie einen der Hauptvorteile von LINQ-to-SQL – den Teil, der das Objektdiagramm zuordnet.
im Grunde LINQ verbinden Der Operator bietet keinen Vorteil für SQL.D.h.die folgende Abfrage
var r = from dealer in db.Dealers
from contact in db.DealerContact
where dealer.DealerID == contact.DealerID
select dealerContact;
führt zu INNER JOIN in SQL
verbinden ist nützlich für IEnumerable<>, weil es effizienter ist:
from contact in db.DealerContact
Die Klausel würde für jeden erneut ausgeführt HändlerBei IQueryable<> ist dies jedoch nicht der Fall.Auch verbinden ist weniger flexibel.
Tatsächlich ist es oft besser, nicht beizutreten, das heißt in Linq.Wenn Navigationseigenschaften vorhanden sind, können Sie Ihre Linq-Anweisung sehr prägnant schreiben:
from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }
Es lässt sich in eine where-Klausel übersetzen:
SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID
Verwenden LINQ tritt bei um Inner Join durchzuführen.
var employeeInfo = from emp in db.Employees
join dept in db.Departments
on emp.Eid equals dept.Eid
select new
{
emp.Ename,
dept.Dname,
emp.Elocation
};
Versuche dies :
var data =(from t1 in dataContext.Table1 join
t2 in dataContext.Table2 on
t1.field equals t2.field
orderby t1.Id select t1).ToList();
var q=(from pd in dataContext.tblProducts join od in dataContext.tblOrders on pd.ProductID equals od.ProductID orderby od.OrderID select new { od.OrderID,
pd.ProductID,
pd.Name,
pd.UnitPrice,
od.Quantity,
od.Price,
}).ToList();
OperationDataContext odDataContext = new OperationDataContext();
var studentInfo = from student in odDataContext.STUDENTs
join course in odDataContext.COURSEs
on student.course_id equals course.course_id
select new { student.student_name, student.student_city, course.course_name, course.course_desc };
Wo Studenten- und Kurstabellen eine Primärschlüssel- und Fremdschlüsselbeziehung haben
Versuchen Sie stattdessen Folgendes:
var dealer = from d in Dealer
join dc in DealerContact on d.DealerID equals dc.DealerID
select d;
var Data= (from dealer in Dealer join dealercontact in DealerContact on dealer.ID equals dealercontact.DealerID
select new{
dealer.Id,
dealercontact.ContactName
}).ToList();
var data=(from t in db.your tableName(t1)
join s in db.yourothertablename(t2) on t1.fieldname equals t2.feldname
(where condtion)).tolist();
var list = (from u in db.Users join c in db.Customers on u.CustomerId equals c.CustomerId where u.Username == username
select new {u.UserId, u.CustomerId, u.ClientId, u.RoleId, u.Username, u.Email, u.Password, u.Salt, u.Hint1, u.Hint2, u.Hint3, u.Locked, u.Active,c.ProfilePic}).First();
Schreiben Sie die gewünschten Tabellennamen und initialisieren Sie die Auswahl, um das Ergebnis der Felder zu erhalten.
Inner Join zweier Tabellen in Linq C#
var result = from q1 in table1
join q2 in table2
on q1.Customer_Id equals q2.Customer_Id
select new { q1.Name, q1.Mobile, q2.Purchase, q2.Dates }
Ein bestes Beispiel
Tabellennamen: TBL_Emp
Und TBL_Dep
var result = from emp in TBL_Emp join dep in TBL_Dep on emp.id=dep.id
select new
{
emp.Name;
emp.Address
dep.Department_Name
}
foreach(char item in result)
{ // to do}