我在这里使用的是Microsoft PUBS数据库,有两个关系表发布者和pub_info发布者在pub_id字段上有主键,而pub_info有发布者表的外键pub_id
我正在尝试使用linq查询获取发布者表中可用但不在pub_info表中的记录 我知道sql中的查询
select pub_id from publisher where pub_id not in(select pub_id from pub_info);
var data =db.publisher.where(x=>db.pub_info.select(x1=>x1.pub_id).Contains(x)).Select(x.pub_id)
执行此查询时出错
但我无法了解在linq中生成相同的查询
答案 0 :(得分:1)
我认为你可以做那样的事情
var excludedIds = db.pub_info.Select(pi => pi.pub_id).ToArray();
var data = db.publisher.Where(p => !excludedIds.Contains(p.pub_id);
我可能错了,但我想我记得它无法在一轮中完成。
编辑:没有一轮制作意味着我认为你必须“枚举”excludedIds。 但是你当然可以在一个查询中写出来。答案 1 :(得分:1)
您可以这样做:
var data=(from p in db.publisher
where !(from pi in db.pub_info
select pi.pub_id
).Contains(p.pub_id)
select p.pub_id
);
或者这可能也有效:
var data=(from p in db.publisher
where !db.pub_info.Select(pi => pi.pub_id).Contains(p.pub_id)
select p.pub_id
);