我正在構建使用Linq實體和表達式樹的高級搜索功能。我有兩個實體,實體A和實體B,其中A是父項,並且與B具有一對多關係。表達式樹多個實體
我已經爲實體A中的字段完成了表達式樹,並且Linq查詢按預期工作。我想添加的是一個功能,我可以查詢返回Entity A記錄,其中實體B中的字段包含一些文本。
我發現有足夠的提示可以確信我可以做到這一點,但我試圖將它全部放入一棵樹中,以便我可以累積過濾。所以我想說或多或少:
SELECT *
FROM EntityA EA
WHERE EA.FieldA = 'exampleinsql'
AND 'test' in (SELECT EB.FieldB
FROM EntityB EB
WHERE EntityB.EntityAForeignKey = EA.ID)
如果有道理?
我在做什麼目前正在通過過濾器對象的列表,然後一起使用下面的代碼snippits結合了一堆表現形式:
Expression expBody = ParseOperator(
Expression.Property(pe, filtersList.FirstOrDefault().FieldName),
filtersList.FirstOrDefault().Operator,
Expression.Constant(filtersList.FirstOrDefault().GetTypedValue()));
expBody = Expression.AndAlso(expBody, newExp);
正如我提到,這對主要實體列的偉大工程。我的理解是,對於EntityB我需要創建一個Lambda表達式來添加到此。我在正確的軌道上嗎?任何人有任何想法?
因此,在對此進行了額外的研究後,我意識到我正在重新發明輪子,並通過重新創建這個過程的一半:https://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/ 想要嘗試一下,看看我能否按我需要的方式工作。 – yanbu 2015-02-23 23:29:38