2012-09-13 30 views
4

我試圖將SQL查詢轉換爲vb中的linq查詢。但我有一些麻煩的語法正確。在VB.net中使用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())) 

我的LINQ

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

回答

5

在這裏,您無法使用等於(運算符)喜歡加入LINQ查詢。這裏Equals是一個對象類的方法,所以你可以使用'。'來訪問。例如employee.AncillaryId.Equals(iCompanyId)

還有一件事情在新條線VB.net的Where條件中需要'_'。

例如

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))) 
2

我認爲你只是缺少一個點 - 嘗試:

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

確認 - 也許不是。抱歉。 –