Entity framework 带join和left table select的DbScanExpression
同事们 我有一组类(表),它们有一些公共属性(列)。我想做的是使用EntityFramework截取选择查询并修改它们 我想添加join和一些where子句。但不知道如何在没有显式属性选择的情况下投影左表 初始查询如下: 背景.贷款 SQL 应修改为以下内容:Entity framework 带join和left table select的DbScanExpression,entity-framework,join,where,interceptor,Entity Framework,Join,Where,Interceptor,同事们 我有一组类(表),它们有一些公共属性(列)。我想做的是使用EntityFramework截取选择查询并修改它们 我想添加join和一些where子句。但不知道如何在没有显式属性选择的情况下投影左表 初始查询如下: 背景.贷款 SQL 应修改为以下内容: SELECT O.LoanNumber AS LoanNumber, O.SEC_OWNER AS SEC_OWNER, FROM dbo.Loans AS O LEFT OUTER JOIN dbo.Users
SELECT
O.LoanNumber AS LoanNumber,
O.SEC_OWNER AS SEC_OWNER,
FROM dbo.Loans AS O
LEFT OUTER JOIN dbo.Users U
ON
O.SEC_OWNER = U.SEC_ID
AND
U.Name = N'root'
WHERE
((256 = (O.SEC_PERMISSIONS & 256))
AND
(O.SEC_OWNER = U.SEC_ID))
var joinExpression = expression.LeftOuterJoin(
userEntityBase.Scan(),
(l, r) =>
l.Property("SEC_OWNER").Equal(r.Property("SEC_ID"))
.And(r.Property("Name").Equal(DbExpression.FromString(this.UserName)))
)
.Where(
exp =>
DbExpressionBuilder
.Constant((int)AccessPermissions.OwnerRead).Equal(exp.Property("l").Property("SEC_PERMISSIONS").BitwiseAnd(DbExpressionBuilder.Constant((int)AccessPermissions.OwnerRead)))
.And(exp.Property("l").Property("SEC_OWNER").Equal(exp.Property("r").Property("SEC_ID")))
);
据我所知,连接两个表中的项目列。但我只需要项目的初始选择,而不知道它
SELECT
[LoanNumber] AS [LoanNumber],
[SEC_OWNER] AS [SEC_OWNER]
提前感谢,
/Artem作为解决该问题的方法,我们从查询中删除了JOIN,并决定使用subselect
public override DbExpression Visit(DbScanExpression expression) {
.Select(u=>u.Property(“SEC_ID”)).Take(1).Element()的计算结果是选择前1名
public override DbExpression Visit(DbScanExpression expression) {
var userEntityBase = expression.Target.EntityContainer.GetEntitySetByName("User", true);
var newExpression = expression
.Where(
exp =>
...
.And(exp.Property("SEC_OWNER")
.Equal(userEntityBase.Scan().Where(user => user.Property("NAME").Equal(DbExpression.FromString(UserName))).Select(u => u.Property("SEC_ID")).Take(1).Element())
)
)
...
);
...
return base.Visit(expression);
}