Конвертация строки в выражение LINQ C#
Предположим, есть следующий класс:
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();
Ответы (1 шт):
Автор решения: Ajmda
→ Ссылка
Как и советовали в комментариях - воспользовался библиотекой 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; }
}
}
}