首頁 > 後端開發 > C++ > 動態 LINQ 如何簡化字串到 LINQ 表達式樹的轉換?

動態 LINQ 如何簡化字串到 LINQ 表達式樹的轉換?

Susan Sarandon
發布: 2025-01-06 18:11:41
原創
687 人瀏覽過

How Can Dynamic LINQ Simplify String-to-LINQ Expression Tree Conversion?

將字串轉換為 LINQ 表達式樹

在軟體開發中,可能有必要在運行時針對資料物件計算布林表達式。實現此目的的一種方法是將表達式轉換為 LINQ 表達式樹。在這裡,我們探索針對此任務的最佳化解決方案。

使用動態 LINQ 克服複雜性

我們可以利用動態 LINQ 函式庫,而不是建構複雜的語法和解析器。該函式庫提供了一種便捷的方法,可以將字串表達式動態編譯為表達式樹。

實作解

使用動態 LINQ,此解涉及下列步驟:

  1. 定義一個包含所需屬性的類別(例如,Person)。
  2. 建立包含布林條件的表達式字串(例如,(Person.Age > 3 AND Person.Weight > 50) OR Person.Age
  3. 使用 DynamicExpression.ParseLambda() 產生表達式樹。
  4. 使用 Compile() 編譯表達式樹。
  5. 使用資料實例評估表達式DynamicInvoke().

範例程式碼

using System;
using System.Linq.Expressions;
using System.Linq.Dynamic;

class Program
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public int Weight { get; set; }
        public DateTime FavouriteDay { get; set; }
    }

    static void Main()
    {
        const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3";
        var p = Expression.Parameter(typeof(Person), "Person");
        var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
        var bob = new Person
        {
            Name = "Bob",
            Age = 30,
            Weight = 213,
            FavouriteDay = new DateTime(2000, 1, 1)
        };

        var result = e.Compile().DynamicInvoke(bob);
        Console.WriteLine(result);
        Console.ReadKey();
    }
}
登入後複製

結論

利用Dynamic LINQ,我們可以利用Dynamic LINQ簡化布林表達式到表達式樹的轉換,消除需要自訂解析器。此解決方案既高效又靈活,使其成為動態表達式求值的合適選擇。

以上是動態 LINQ 如何簡化字串到 LINQ 表達式樹的轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板