Динамически создаваемое выражение - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь создать выражение для запроса Linq динамически, но оно возвращает только это сообщение:

{Метод = выражение оценки внутренней ошибки} Я использую Vs 2019 и. NET Core 3.1. Класс Client {publi c string Name {get; набор; } ...}

        var parameter = Expression.Parameter(typeof(Client), "x");
        var member = Expression.Property(parameter, "Name");
        var constant = Expression.Constant("X Y");
        var exp = Expression.Equal(member, constant);
        var func = Expression.Lambda(exp, parameter).Compile();

Где я могу ошибиться, пожалуйста?

ОБНОВЛЕНИЕ

namespace Domain
{
public class Client
{
    public string Name { get; set; }

    public string UserName { get; set; }

    public string Department { get; set; }

    public string CompanyPhoneNumber { get; set; }

    public string PrivateMobileNumber { get; set; }

    public string ComputerName { get; set; }

    public Guid InternetProviderId { get; set; }

    public virtual InternetProvider InternetProvider { get; set; }

    public string OtherInternetProvider { get; set; }
}
}

1 Ответ

1 голос
/ 29 апреля 2020

Expression.Lambda метод имеет обобщенную c версию, которая позволяет указать тип делегата, последнюю строку можно изменить на:

var func = Expression.Lambda<Func<Client, bool>>(exp, parameter).Compile();

Пример использования:

var list = new List<Client>
{
    new Client() { Name = "X Y"}
};

var l2 = list.Where(func).ToList();

Рабочий пример: здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...