Dot-Net

實現自定義 LINQ-to-X 提供程序

  • August 16, 2021

我有一個搜尋工具,它採用複雜的搜尋字元串(實際上是 JSON 中的 n 級對像圖)並返回一些結果。我想通過類似 LINQ 的機制向其他(內部)開發人員公開該功能。

假設每個結果都由一個類定義Result

我可以創建看起來像這樣的方法:

Function Search(Expression As Linq.Expression(Of System.Func(Of Result, Boolean))) As IEnumerable(Of Result)

我不清楚的是如何遍歷該Expression參數並提取實際標準,然後我可以將其形成對像圖以執行我的查詢。

有人可以指出如何實現這一點的教程/範例嗎?

對於一點背景知識,我已經設法深入研究表達式以獲得遞歸結構並能夠檢查.Bodylambda 表達式,但是當我想處理具有例如 type 的節點的Left和屬性時,我有問題。調試器正在使用 Friend 範圍的類 ( ) 來檢查我無法使用的表達式,因此我顯然走錯了路。Right``ExpressionType.Or``BinaryExpressionProxy

您可能希望查看ExpressionVisitor類的子類化。這提供了遍歷表達式樹的機制,您所擁有的所有方法都覆蓋了處理每種類型節點的方法。

以下是您可能會發現有用的其他一些連結:

您可以嘗試使用我編寫的名為LinqToAnything的項目,您可以使用它來包裝數據源以公開 IQueryable,具體取決於您的需要。

引用自:https://stackoverflow.com/questions/12181276