簡體   English   中英

如果另一個表中不存在Linq,則返回與表中不同的值

[英]Linq return distinct values from table if not exist in another

我正在嘗試從Staging返回所有不同的行,其中Staging.CenterCode在Centers.CenterCode中不存在。

目前,分期有大約850個不同的CenterCodes,而Centers為空,因此我應該獲取所有不同的行,但計數會有所不同:)

有任何想法嗎?

 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();

我只需要分期中的唯一列,因此不確定我是否真的需要與上述連接,因為我從未使用過從Centers返回的數據-但是我嘗試了兩者,並獲得了相同的0值作為計數。

有任何想法嗎?

我不會使用聯接,而是使用包含。

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();

join是內部聯接。 因此,如果1個表中的所有行均不匹配指定標識符上的另一個表,則它將返回0。在您的表中,您試圖將1個表與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();

看起來您正在嘗試通過左外部連接實現 連接 ,這是可能的方法之一,但是要使其正常工作,您需要進行更改

where s.CenterCode != t.CenterCode

where t == null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM