Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh menilai secara dinamik ungkapan LINQ daripada rentetan dalam C#?

Bagaimanakah saya boleh menilai secara dinamik ungkapan LINQ daripada rentetan dalam C#?

Barbara Streisand
Lepaskan: 2025-01-06 18:25:40
asal
463 orang telah melayarinya

How can I dynamically evaluate LINQ expressions from strings in C#?

Menilai Ungkapan LINQ Secara Dinamik daripada Rentetan

Masalah:

Diberi rentetan input yang mewakili a Ungkapan LINQ, seperti "(Person.Umur > 3 AND Person.Weight > 50) ATAU Person.Umur <3", matlamatnya adalah untuk mencipta Func yang boleh dinilai berdasarkan contoh kelas Orang.

Pendekatan Terlalu Banyak:

Penyelesaian yang dicadangkan yang melibatkan tatabahasa ANTLR dan rangka kerja Pembina Predikat mungkin tidak perlu rumit.

Penyelesaian Alternatif: Dinamik LINQ

Perpustakaan LINQ Dinamik menyediakan penyelesaian yang elegan dan mudah. Begini cara untuk menggunakannya:

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

namespace ExpressionParser
{
    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()
        {
            // Input expression string
            const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3";

            // Compile expression into a lambda expression
            var p = Expression.Parameter(typeof(Person), "Person");
            var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, exp);

            // Create a Person instance
            var bob = new Person
            {
                Name = "Bob",
                Age = 30,
                Weight = 213,
                FavouriteDay = new DateTime(2000, 1, 1)
            };

            // Evaluate expression against the Person instance
            var result = e.Compile().DynamicInvoke(bob);

            // Print result
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}
Salin selepas log masuk

Dalam contoh ini, kami menghuraikan rentetan ungkapan secara dinamik ke dalam ungkapan lambda dan kemudian menyusunnya menjadi Func. Kami kemudiannya boleh menilai fungsi terhadap tika Orang untuk menentukan sama ada ia sepadan dengan kriteria yang ditentukan.

Faedah LINQ Dinamik:

  • Kemudahan untuk Gunakan: API ringkas yang membolehkan pembinaan dinamik ungkapan LINQ daripada rentetan.
  • Kepelbagaian: Menyokong rangkaian luas pengendali dan jenis ungkapan.
  • Ringan: Hanya termasuk kefungsian yang diperlukan untuk menghurai dan menilai ungkapan .

Nota: Ingat untuk memasukkan pakej System.Linq.Dynamic nuget untuk kod ini berfungsi.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menilai secara dinamik ungkapan LINQ daripada rentetan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan