如果在另一个表中不存在,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值计数。

任何想法?

如果在另一个表中不存在,Linq将返回不同的值

我不会使用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