2015-05-07 162 views
0

我正試圖在實體(VB.NET)中實現linq連接。在SQL會是這個樣子:Linq Group加入Where子句

SELECT someField FROM SomeTable a 
LEFT JOIN someOtherTable b ON a.Key = b.Key AND b.Name <> '' 

這是查詢的只是一小部分,還有很多其他的連接,但問題是在加入where子句。我通常可以通過加入匿名類型來完成此操作,但我不確定如何使用匿名類型方法在聯接中實現b.Name <>''。例如:

Return From document In dbContext.Documents 
      Group Join assessorNumberRow In dbContext.AssessorNumbers 
       On New With {document.DocumentId, .IsEmpty = False} Equals {assessorNumberRow.DocumentId, assessorNumberRow.AssessorNumber1} 
       Into foundAssessorNumbers = Group 
       From foundAssessorNumber In foundAssessorNumbers.DefaultIfEmpty() 

但是,這是行不通的,因爲匿名類型不能比擬的,因爲我不是很清楚如何設置的條件,以確保assessorNumberRow.Number不是空在連接 - 不在最後的where子句中。

我想我可以做這樣的事情在最後其中:

Where foundAssessorNumber Is Nothing OrElse foundAssessorNumber.Number <> string.empty. 

,但我認爲,包括的語法,其中的實際情況加入更容易遵守,而不是跟蹤其到年底整個查詢。

有什麼想法?

回答

1

之前還是可以做到這一點,添加Where擴展方法向左加盟實體,例如

(不用於vb.net LINQ的語法,所以有可能是錯誤)

Return From document In dbContext.Documents 
      Group Join assessorNumberRow In dbContext.AssessorNumbers.Where(Function(a) a.Number <> string.Empty)) 
      On ... 
+0

人,我不敢相信我沒有想到這樣做。非常好,謝謝! – DonnieDarko