2017-04-06 61 views
1

我有有相似的結構兩個表。每個表都有一個IdFirstValueSecondValue領域。我想使用Linq-to-SQL來獲取TableOne中的每一行,而不是TableTwo(基於Id),並且還獲取兩個表中的每一行,但具有不同的值FirstValueSecondValue。在SQL應該像獲取不同的值或缺少的行從一個表

SELECT TableOne.* 
FROM TableOne 
    LEFT OUTER JOIN TableTwo 
     ON TableOne.Id = TableTwo.Id 
WHERE TableTwo.Id IS NULL 
    OR (TableTwo.Id IS NOT NULL AND 
     (TableOne.FirstValue <> TableTwo.FirstValue OR 
     TableOne.SecondValue <> TableTwo.SecondValue 
     ) 
    ) 

我已經試過

(from a in context.TableOne 
from b in context.TableTwo.Where(b => 
      a.Id == b.Id && 
     (a.FirstValue != b.FirstValue || 
      a.SecondValue != b.SecondValue)).DefaultIfEmpty() 
select a).ToList(); 

在該查詢的問題是,如果TableOneTableTwo有匹配的值,該行仍然得到恢復,但所有的TableTwo的值爲空。如果一行在每個表中都有相同的值,我希望它不會被返回。

回答

1

使用GroupJoin從第二個表中獲取與第一個表中的實體對應的所有記錄。然後簡單地獲得那些在第二表中沒有匹配記錄的記錄,或者具有不同的值:

from a in context.TableOne 
join b in context.TableTwo on a.Id equals b.Id into g 
from b in g.DefaultIfEmpty() 
where b == null || a.FirstValue != b.FirstValue || a.SecondValue != b.SecondValue 
select a 
+1

謝謝。這工作完美。 –

相關問題