Linq Group加入Where子句

时间:2015-05-07 16:02:09

标签: vb.net linq

我正在尝试实现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条件的语法更容易理解,而不是将其添加到整个查询的末尾。

有什么想法?

1 个答案:

答案 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 ...