Am'm scris un LINQ to SQL, și am'm după sintaxa standard pentru un normal inner join cu un " PE " clauză în C#.
Cum să reprezinți următoarele în LINQ la SQL:
select DealerContact.*
from Dealer
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID
E ceva de genul:
from t1 in db.Table1
join t2 in db.Table2 on t1.field equals t2.field
select new { t1.field2, t2.field3}
Ar fi frumos să avem sensibil nume și domenii de mese pentru un exemplu mai bun. :)
Update
Cred că de interogare acest lucru ar putea fi mai potrivit:
var dealercontacts = from contact in DealerContact
join dealer in Dealer on contact.DealerId equals dealer.ID
select contact;
Când sunteți în căutarea pentru contacte, nu de la dealeri.
Pentru a prelungi durata de exprimare lanț sintaxa răspunde de Inteligent Umane:
Dacă ai vrut să faci lucruri (cum ar fi filtru sau selectați) pe câmpurile din ambele tabele s-au unit în loc doar pentru unul din cele două tabele-ai putea crea un obiect nou în expresie lambda de parametrul final să se Alăture metodă care încorporează ambele tabele, de exemplu:
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 });
Partea interesantă este lambda expresie în linia 4 de exemplu:
(dc, d) => new { DealerContact = dc, Dealer = d }
...în cazul în care vom construi o nouă anonim de tip obiect, care are ca proprietăți DealerContact și Traficant de înregistrări, împreună cu toate câmpurile lor.
Putem folosi apoi câmpurile din înregistrările ca ne-am filtra și selecta rezultatele, după cum o demonstrează restul de exemplu, care foloseste dc_d` ca un nume pentru anonim obiect construit, care are atât DealerContact și Traficant de înregistrări ca și proprietățile sale.
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();
Creați o cheie externă, și LINQ la SQL creează navigare proprietăți pentru tine. Fiecare "Comerciant" va avea apoi o colecție de DealerContacts` care puteți selecta, filtru, și de a manipula.
from contact in dealer.DealerContacts select contact
sau
context.Dealers.Select(d => d.DealerContacts)
Daca're nu utilizați navigare proprietăți, ai're lipsește unul dintre principalele beneficii pe LINQ la SQL - partea care hărți obiect grafic.
practic LINQ alăturați-vă operatorul oferă nici un beneficiu pentru SQL. I. e. următoarea interogare
var r = from dealer in db.Dealers
from contact in db.DealerContact
where dealer.DealerID == contact.DealerID
select dealerContact;
va duce în INTERIOR se ALĂTURE în SQL
alăturați-vă este util pentru IEnumerable<> pentru că este mai eficient:
from contact in db.DealerContact
clauza ar fi re-executat pentru fiecare dealer Dar pentru IQueryable<> nu este cazul. De asemenea, alăturați-vă este mai puțin flexibil.
De fapt, de multe ori este mai bine să nu să se alăture, în linq că este. Atunci când există un sistem de navigare proprietăți-un mod foarte succint pentru a scrie linq declarație este:
from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }
Ea se traduce printr-o clauza where:
SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID
Folosi LINQ se alătură pentru a efectua Inner Join.
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
};
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 };
În cazul în care studentul și, desigur tabele au cheie primară și cheie externă relație
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();
Scrie numele de masă doriți, și inițializa selectați pentru a obține rezultatul de domenii.
Inner join două tabele în 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 }
Cel Mai bun exemplu
Tabelul Nume : TBL_Emp " și " 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}