在VB.net中使用Linq编写连接查询

在VB.net中使用Linq编写连接查询,vb.net,linq,entity-framework,join,Vb.net,Linq,Entity Framework,Join,我正在尝试在vb中将SQL查询转换为linq查询。但是我在语法正确方面有点困难 原始查询 SELECT b.* FROM History_Table_B b INNER JOIN Employee e ON b.EmployeeId = e.EmployeeId INNER JOIN Company c ON e.CompanyId = c.CompanyId WHERE e.AncillaryId = @AncillaryPersonId AND c.AncillaryId = @A

我正在尝试在vb中将SQL查询转换为linq查询。但是我在语法正确方面有点困难

原始查询

SELECT b.* 
FROM History_Table_B b 
INNER JOIN Employee e ON b.EmployeeId = e.EmployeeId 
INNER JOIN Company c ON e.CompanyId = c.CompanyId 
WHERE e.AncillaryId = @AncillaryPersonId 
AND c.AncillaryId = @AncillaryCompanyId
AND (b.EndDate is null OR b.EndDate >= convert(date, GetDate()))
我的林克

Dim result = From b In context.H_Table_B
             Join employee In context.Employees
             On b.EmployeeId Equals (employee.EmployeeId)
             Join company In context.Companies
             On employee.CompanyId Equals (company.CompanyId) 
             Where employee.AncillaryId Equals(iPerId) 
             And company.AncillaryId Equals (iCompanyId) 
             And ((b.EndDate Is Nothing) Or (b.EndDate Equals(DateTime.Today)))

我想你只是漏掉了一点——试试看:

...b.EndDate.Equals(DateTime.Today)

在where条件下,不能像Join LINQ查询那样使用Equals(运算符)。此处Equals是对象类的一个方法,因此您可以使用“.”进行访问,例如
employee.AncillaryId.Equals(iCompanyId)

还有一件事,新行VB.net的Where条件需要“\u1”

e、 g

From b In context.H_Table_B
         Join employee In context.Employees
         On b.EmployeeId Equals (employee.EmployeeId)
         Join company In context.Companies
         On employee.CompanyId Equals (company.CompanyId) 
         Where employee.AncillaryId.Equals(iPerId) _ 
         And company.AncillaryId.Equals(iCompanyId) _
         And ((b.EndDate Is Nothing) Or (b.EndDate.Equals(DateTime.Today)))