如果在另一个表中不存在,Linq将返回不同的值
本文关键字:返回 Linq 另一个 不存在 如果 | 更新日期: 2023-09-27 18:03:45
我试图从Staging下面返回所有不同的行。center .CenterCode.
目前Stagings有大约850个不同的中心代码和中心是空的,所以我应该得到所有不同的行,但计数请求不同:)
任何想法?
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值计数。
任何想法?
我不会使用join,而是使用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();
join
是一个内连接。因此,如果一个表中的所有行都与指定标识符上的另一个表不匹配,那么它将返回0。在您的工作中,您正在尝试与空表连接具有850个不同行的1个表。这将返回0。
如果你想只返回一个表中不在另一个表中的行,你可以使用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