2016-08-23 35 views
0

我試圖從Staging.CenterCode不存在於Centers.CenterCode中的下面的Staging中返回所有不同的行。Linq從表中返回不同的值(如果不存在於另一個表中)

目前Stagings有大約850不同CenterCodes和中心是空的,所以我應該得到所有不同行,但數量不敢苟同:)

任何想法?

var query = 
       (from s in db.Stagings 
       join t in db.Centers on s.CenterCode equals t.CenterCode into tj 
       from t in tj.DefaultIfEmpty() 
       where s.CenterCode != t.CenterCode 
       select s.CenterCode).Distinct(); 

      var c = query.Count(); 

我只需要從登臺所以不知道的唯一列,如果我真的需要,因爲我沒有使用從中心返回的數據曾經與上述的聯接 - 但我曾經嘗試都,並獲得相同的0值計數。

任何想法?

+0

任何答案對您有幫助嗎? – sr28

回答

0

我不會使用連接,而是使用Contains。

var centerCodesQuery = db.Centers.CenterCode 
    .Select(x => x.CenterCode); 
var query = db.Staging 
    .Where(x => !centerCodesQuery.Contains(x.CenterCode)) 
    .Select(x => x.CenterCode) 
    .Distinct(); 
var c = query.Count(); 
0

join是內連接。因此,如果1表中沒有任何行與指定的標識符上的其他表匹配,那麼它將返回0.在您的嘗試中,您嘗試使用空表連接850個不同的行。這將返回0。

如果你真的只想返回在1臺是不是那些行的另一個你可以使用Except

var query = (from s in db.Stagings 
      select s.CenterCode) 
      .Except(from t in db.Centers 
        select t.CenterCode); 

var c = query.Count(); 
0

貌似你試圖通過left outer join實現antijoin,這是可能的方式之一,但爲了使其工作,你需要改變

where s.CenterCode != t.CenterCode 

where t == null 
相關問題