Конвертация строки в выражение LINQ C#

Рейтинг: 5Ответов: 1Опубликовано: 21.07.2025

Предположим, есть следующий класс:

public class Test 
{
    public int LENGTH { get; set; }
    public int VALUE { get; set; }
}

Со стороны БД в отдельной таблицы в nvarchar храню лямбду (например, x => x.VALUE >10). Как в коде перевести это в формат?

var exp = "x => x.VALUE >10"; //Для упрощения - здесь я бы из БД вытягивал значение
var list = new List<Test>();
list.Add(new Test {LENGTH = 0, VALUE = 1});
list.Add(new Test {LENGTH = 1, VALUE = 5});
list.Add(new Test {LENGTH = 2, VALUE = 11});
var result = list.Where(exp).ToList(); 

Ответы

▲ 6Принят

Как и советовали в комментариях - воспользовался библиотекой dynamic-linq. Рабочий код теперь выглядит так:

using System.Linq.Dynamic.Core;

namespace TestApp
{
    internal class Program
    {
        static void Main(string[] args)
        {

            var exp = "x => x.VALUE > 10";
            var list = new List<Test>();
            list.Add(new Test() { LENGTH = 0, VALUE = 1 });
            list.Add(new Test() { LENGTH = 1, VALUE = 5 });
            list.Add(new Test() { LENGTH = 2, VALUE = 11 });
            
            var result = list.AsQueryable().Where(exp).ToList();

            
        }

        public class Test
        {
            public int LENGTH { get; set; }
            public int VALUE { get; set; }
        }
    }
}