LINQ to SQL并使用OR子句连接两个表

sug*_*rum 5 linq vb.net where linq-to-sql

假设我有计划和文件

Dim myPlans = _context.Plans.Where(predicate1)
Dim myDocuments = _context.Documents.Where(predicate2)
Run Code Online (Sandbox Code Playgroud)

我使用PredicateBuilder为每个子句构造了where子句.因此,myPlans和myDocuments具有正确的SQL语句.

我想做的是将这两个表连接成一个linq语句.我遇到的问题是,默认情况下AND条件是加入where子句.

myPlans Where子句:( p.name喜欢"%test%"和p.name喜欢"%bed%")或(p.description喜欢"%test%"和p.description喜欢"%bed%")

myDocuments Where子句:( d.name喜欢"%test%"和d.name喜欢"%bed%")或(d.描述如"%test%"和d.description如"%bed%")

当我将两个结合起来时,期望的结果Where子句是:
Where(d.ID = p.ID)AND(上面的myplans where子句)OR(上面的mydocument where子句).意思是,我希望每个表中的两个where子句是"或"而不是"And".

当前结果where子句是:Where(d.ID = p.ID)AND(上面的myplans where子句)AND(上面的mydocument where子句).意思是,我希望每个表中的两个where子句是"或"而不是"And".

我正在形成这样的声明:

Dim test = From d in myDocuments _
           Join p in MyPlans on d.ID Equals p.ID _
           Select d.Name, p.Name
Run Code Online (Sandbox Code Playgroud)

Jos*_*lio 3

为了达到您想要的结果,您需要在单个语句上进行谓词过滤和连接。

Dim myCriteria() = {"test", "bed"}
Dim test = from d in _context.Documents _
           join p in _context.Plans on d.ID Equals p.ID _
           where (myCriteria.Contains(d.Name) OR _
                   myCriteria.Contains(d.Descrition)) _
           OR (myCriteria.Contains(p.Name) OR _
                 myCriteria.Contains(p.Description)) _
           select Document = d.Name, Plan = p.Name
Run Code Online (Sandbox Code Playgroud)