我正在尝试从Centers.CenterCode中不存在Staging.CenterCode的Staging返回所有不同的行。
目前,Stagings有大约850个不同的CenterCodes和Center是空的,所以我应该得到所有不同的行,但是计数不同:)
有什么想法吗?
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 :(得分: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();
答案 1 :(得分: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();
答案 2 :(得分:0)
您似乎正在尝试通过antijoin实施left outer join,这是可能的方法之一,但为了使其有效,您需要更改
where s.CenterCode != t.CenterCode
到
where t == null