[英]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的GroupBy
或Join
操作,则可以使用),因此,我们必须通过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.