【问题标题】:How to use 'In' SQL keyword in Entity Framework?如何在实体框架中使用“In”SQL 关键字?
【发布时间】:2013-08-26 01:10:58
【问题描述】:

这是我的 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中使用SQLIN关键字?

【问题讨论】:

  • 这帮不上什么忙,但我在用手机,无法检查代码。您想查看 LET 关键字。
  • “不工作”是什么意思?

标签: c# asp.net entity-framework


【解决方案1】:

试试这个:

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;

【讨论】:

    【解决方案2】:

    请注意,此 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};
    

    【讨论】:

      【解决方案3】:

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

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

      所以在 EF6 中查找

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        • 2012-08-09
        • 1970-01-01
        相关资源
        最近更新 更多