LINQ to SQL中的内部连接的语法是什么?

我正在编写一个LINQ to SQL语句,并且在C#中使用ON子句的正常内连接的标准语法。

如何在LINQ to SQL中表示以下内容:

 select DealerContact.* from Dealer inner join DealerContact on Dealer.DealerID = DealerContact.DealerID 

它是这样的:

 from t1 in db.Table1 join t2 in db.Table2 on t1.field equals t2.field select new { t1.field2, t2.field3} 

为了更好的例子,为表格添加明智的名称和字段会很好。 🙂

更新

我想为你的查询这可能是更合适的:

 var dealercontacts = from contact in DealerContact join dealer in Dealer on contact.DealerId equals dealer.ID select contact; 

既然你正在寻找联系人,而不是经销商。

而且,因为我更喜欢expression式链式语法,所以您可以这样做:

 var dealerContracts = DealerContact.Join(Dealer, contact => contact.DealerId, dealer => dealer.DealerId, (contact, dealer) => contact); 
 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(); 

使用Linq Join操作符:

 var q = from d in Dealer join dc in DealerConact on d.DealerID equals dc.DealerID select dc; 

基本上LINQ 连接运算符对SQL没有任何好处。 即下面的查询

 var r = from dealer in db.Dealers from contact in db.DealerContact where dealer.DealerID == contact.DealerID select dealerContact; 

将导致SQL中的INNER JOIN

连接对于IEnumerable <>是有用的,因为它更高效:

 from contact in db.DealerContact 

条款将被重新执行每个经销商但是对于IQueryable <>情况并非如此。 join也不那么灵活。

为了扩展Clever Human的expression式链式语法答案 :

如果你想对两个表中的字段进行相同的操作(比如过滤或select),而不是仅仅在这两个表中的一个表上 – 你可以在Join方法的最后一个参数的lambdaexpression式中创build一个新的对象合并这两个表格,例如:

 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 }); 

有趣的部分是该例子第4行中的lambdaexpression式:

 (dc, d) => new { DealerContact = dc, Dealer = d } 

…在这里我们构造一个新的匿名types的对象,它具有DealerContact和Dealerlogging的属性,以及它们的所有字段。

然后,我们可以使用这些logging中的字段来筛选和select结果,如示例的其余部分所示,该示例使用dc_d作为我们构build的匿名对象的名称,该对象同时具有DealerContact和Dealerlogging作为其属性。

你创build一个外键,LINQ-to-SQL为你创build导航属性。 然后,每个Dealer将拥有一系列DealerContacts ,您可以select,过滤和操作。

 from contact in dealer.DealerContacts select contact 

要么

 context.Dealers.Select(d => d.DealerContacts) 

如果您不使用导航属性,那么您就错过了LINQ-to-SQL(映射对象图的部分)的一个主要优点。

其实,往往最好不要join,就是linq。 当有导航属性时,写出linq语句的一个非常简洁的方法是:

 from dealer in db.Dealers from contact in dealer.DealerContacts select new { whatever you need from dealer or contact } 

它转换为where子句:

 SELECT <columns> FROM Dealer, DealerContact WHERE Dealer.DealerID = DealerContact.DealerID 

使用LINQ连接来执行内部连接。

 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 data =(from t1 in dataContext.Table1 join t2 in dataContext.Table2 on t1.field equals t2.field orderby t1.Id select t1).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 }; 

学生和课程表有主键和外键关系

试试这个,

 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(); 

内部连接Linq C#中的两个表

var result =
从表1中的q1开始
在表2中joinq2
在q1.Customer_Id等于q2.Customer_Id
select新的{q1.Name,q1.Mobile,q2.Purchase,q2.Dates}

一个最好的例子

表名称: TBL_EmpTBL_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}