繁体   English   中英

如何在EF5中使用“ SELECT IN”

[英]How to use “SELECT IN” in EF5

我发送了这个罕见的查询,我真的很难将其传递给ef,能否请我帮忙?

提前非常感谢你

SELECT
    c.*
FROM
    Company c
    JOIN [User] u ON c.id = u.id_company
WHERE
    (
        ( u.id_usertype = 3 )
        AND
        ( u.id = 2135 )
    )

UNION

SELECT
    c.*
FROM
    Company c
    JOIN Company mc ON c.id_company = mc.id
WHERE
    mc.id in
    (
        SELECT
            c.id
        FROM
            Company c
            JOIN [User] u ON c.id = u.id_company 
        WHERE
        (
            ( u.id_usertype = 3 )
            AND
            ( u.id = 2135 )
        )
    )

现在,您已经解释了子公司/公司的关系,我看到可以将查询更改为以下查询:

SELECT
    Company.*
FROM
    [User]
    INNER JOIN Company ON [User].id_company = Company.id
WHERE
    [User].id = 2135

UNION

SELECT
    SubCompany .*
FROM
    [User]
    INNER JOIN Company ON [User].id_company = Company.id
    INNER JOIN Company AS SubCompany ON Company.id = SubCompany.id_company
WHERE
    [User].id = 2135

通过更改INNER JOIN Company As SubCompany ,可以将基于UNION的查询简化为以下单个查询,以便使用OR使其既与原始公司也与子公司匹配。

SELECT
    SubCompany.*
FROM
    [User]
    INNER JOIN Company ON [User].id_company = Company.id
    LEFT OUTER JOIN Company AS SubCompany ON
    (
        Company.id = SubCompany.id_company
        OR
        Company.id = SubCompany.id
    )
WHERE
    [User].id = 2135

但是,在Linq中,如果使用的是Navigation Properties,则不能使用复杂的JOIN条件(如果使用Linq的GroupByJoin操作,则可以使用),因此,我们必须通过Concat操作退回到UNION

我假设您在实体框架中定义了Company->SubCompany关系,在这种情况下,可以使用SelectMany

var query = dbContext
    .Users
    .Where( u => u.id == 2135 )
    .Select( u => u.Company )
    .Concat(
        dbContext
            .Users
            .Where( u => u.id == 2135 )
            .SelectMany( u => u.Company.SubCompanies )
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM