生成linq查询

时间:2012-04-05 13:04:22

标签: sql linq oracle linq-to-sql

我在这里使用的是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中生成相同的查询

2 个答案:

答案 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
         );