[英]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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.