我正在尝试实现linq到实体的连接(VB.NET)。 sql看起来像这样:
SELECT someField FROM SomeTable a
LEFT JOIN someOtherTable b ON a.Key = b.Key AND b.Name <> ''
这只是查询的一小部分,还有很多其他连接,但问题是连接的where子句。我通常可以通过加入匿名类型来实现这一点,但我不确定如何实现b.Name&lt;&gt; ''在使用匿名类型方法的连接中。例如:
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()
但是这不起作用,因为匿名类型无法比较,因为我不太确定如何设置条件以确保在连接中evaluateorNumberRow.Number不为空 - 而不是在最后的where子句中。
我想我可以在最后的地方做这样的事情:
Where foundAssessorNumber Is Nothing OrElse foundAssessorNumber.Number <> string.empty.
但我认为在实际连接中包含where条件的语法更容易理解,而不是将其添加到整个查询的末尾。
有什么想法?
答案 0 :(得分: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 ...