2013-08-26 39 views
3

这是我的SQL命令如何在Entity Framework中使用'In'SQL关键字?

SELECT KEY,NAME 
from COMPANY c 
WHERE  KEY IN (select KEY from USER_COMPANY where UserId = @UserId) 
order by NAME asc 

所以我想将其转换为实体框架。

我尝试这样

var userCompany = (from u in db.USER_COMPANY 
         where u.UserId == UserId 
         select(u.KEY)); 

      var user = (from c in db.COMPANY 
         where (c => userCompany.Contains(c.KEY) 
         select c); 

,但它无法正常工作。

如何在Entity Framework中使用SQL IN关键字?

+0

这没什么帮助,但我在我的手机上,无法检查代码。你想看看LET关键字。 –

+0

“不工作”是什么意思? –

回答

4

试试这个:

var query = from c in db.COMPANY 
      where (from u in db.USER_COMPANY 
        where u.UserId == UserId 
        select u.KEY).Contains(c.KEY) 
      orderby c.NAME 
      select c.KEY, c.NAME; 
+0

我知道LINQ可以。 +1。 – dotNET

-1

我的理解是,从.Contains()IN的翻译只是刚添加到EF6中。

根据此工作项目(http://entityframework.codeplex.com/workitem/245)和发行说明:改进了LINQ查询中Enumerable.Contains的性能。

因此,在EF6中查找它

1

注意,该SQL查询具有完全相同的含义:

SELECT c.KEY, c.NAME 
FROM COMPANY c 
JOIN (SELECT DISTINCT KEY FROM USER_COMPANY where UserId = @UserId) u 
ON U.KEY = C.KEY 
ORDER BY c.NAME asc 

所以,你应该能够只是做:

var userCompany = (from u in db.USER_COMPANY 
        where u.UserId == UserId 
        select(u.KEY)).Distinct(); 

var result = from c in db.COMPANY 
      join u in userCompany 
      on c.KEY = u.KEY 
      select new {c.KEY, c.NAME}; 
相关问题