gpt4 book ai didi

c# - 使用 Expression. 语法动态构建表达式树

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:52 25 4
gpt4 key购买 nike

我有以下构建 IQueryable 的代码

Expression<Func<TParentEntity, TChildEntity, bool>> joinExpr =
ctx.GetJoinExpression<TParentEntity, TChildEntity>();

Expression<Func<TChildEntity, bool>> childSelectionExpression =
GetExpression<TChildEntity>(ctx);

return
from parentEntity in ctx.GetQueryable<TParentEntity>()
.AsExpandable()
let childEntities =
from child in ctx.GetQueryable<TChildEntity>()
where joinExpr.Invoke(parentEntity, child)
select child
where childEntities.Any(childSelectionExpression)
select parentEntity;

我一直在尝试(未成功)构建会返回相同结果的表达式树。我想要一个表达式 Expression<Func<TParentEntity,bool> parentExpression我可以按如下方式使用:

from parentEntity in ctx.GetQueryable<TParentEntity>()
.AsExpandable()
where parentExpression.Invoke(parentEntity)
select parentEntity

有人认为这是可能的吗?我相信是的,但我无法解决它......

最佳答案

我知道你想要什么,因为我已经尝试过了,我很遗憾地通知你,你已经来到了一个痛苦的世界。这是部分解决方法:

Expression<Func<TParentEntity, TChildEntity, bool>> joinExpr =
ctx.GetJoinExpression<TParentEntity, TChildEntity>();

Expression<Func<TChildEntity, bool>> childSelectionExpression =
GetExpression<TChildEntity>(ctx);

return
(from parentEntity in ctx.GetQueryable<TParentEntity>()
.AsExpandable()
let childEntities =
from child in ctx.GetQueryable<TChildEntity>()
where joinExpr.Invoke(parentEntity, child)
select child
select parentEntity).Where(childSelectionExpression);

您必须像我一样转换所有使用表达式变量的查询调用。并非总是可行,但我认为在您的情况下是可行的。

关于c# - 使用 Expression.<Factory method> 语法动态构建表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4860921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com