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)
为了达到您想要的结果,您需要在单个语句上进行谓词过滤和连接。
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)
归档时间: |
|
查看次数: |
10565 次 |
最近记录: |