2012-04-05 92 views
1

我使用微软PUBS数据库,这有两个关系表的出版商和pub_info出版商都在pub_id上现场和pub_info有发行商表的外键PUB_ID生成LINQ查询

我试图让那些记录的主键,其在出版商表,但使用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) 

得到错误的查询,同时执行这个查询

但我不能够GE关于LINQ

+0

**你什么错误** – SLaks 2012-04-05 13:07:11

+0

问一个问题[再次](HTTP ://stackoverflow.com/questions/10016597/generating-linq-query)非常糟糕! – 2012-04-06 09:43:30

回答

1

产生相同的查询t计,我认为你可以做这样的事情

var excludedIds = db.pub_info.Select(pi => pi.pub_id).ToArray(); 

var data = db.publisher.Where(p => !excludedIds.Contains(p.pub_id); 

我可能是错的,但我想我还记得,它不能在一个回合进行。

编辑:不是在一回合意味着我认为你必须“枚举”excludedIds。 但是,您可以在一个查询中编写它,当然。

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