【发布时间】:2015-02-23 22:06:16
【问题描述】:
我正在使用 Linq to 实体和表达式树构建高级搜索功能。我有两个实体,实体 A 和实体 B,其中 A 是父级并且与 B 具有一对多关系。
我已完成实体 A 中字段的表达式树,并且 Linq 查询按预期工作。我要添加的是一项功能,我可以在其中查询以返回实体 B 中的字段包含一些文本的实体 A 记录。
我已经找到了足够多的提示,可以相当确定我可以做到这一点,但我正在尝试将它们全部整合到一棵树中,以便我可以累积过滤。所以我希望能够或多或少地说:
SELECT *
FROM EntityA EA
WHERE EA.FieldA = 'exampleinsql'
AND 'test' in (SELECT EB.FieldB
FROM EntityB EB
WHERE EntityB.EntityAForeignKey = EA.ID)
这有意义吗?
我目前正在做的是传递一个过滤器对象列表,然后使用下面的代码片段将一堆表达式组合在一起:
Expression expBody = ParseOperator(
Expression.Property(pe, filtersList.FirstOrDefault().FieldName),
filtersList.FirstOrDefault().Operator,
Expression.Constant(filtersList.FirstOrDefault().GetTypedValue()));
expBody = Expression.AndAlso(expBody, newExp);
正如我所提到的,这对于主实体上的列非常有用。我的理解是,对于 EntityB,我需要创建一个 Lambda 表达式来添加它。我在正确的轨道上吗?有人有什么想法吗?
【问题讨论】:
-
因此,在对此进行了额外研究之后,我意识到我正在重新发明轮子,并且已经完成了一半:petemontgomery.wordpress.com/2011/02/10/… 打算尝试一下,看看我是否可以让它发挥作用我需要的方式。
标签: c# linq entity-framework linq-to-entities expression-trees