Получить значение выражения в виде строки - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над универсальным c репозиторием для Entity Framework. Для поиска значений у меня есть метод Find в моем хранилище, который принимает выражение. Во время этого процесса я хочу записать выражение. Я делаю это, получая expression.Body.

Вот мой код

    public async Task<TEntity> FindFirstOrDefault<TEntity>(Expression<Func<TEntity, bool>> expression) where TEntity : class
    {
        string expBody = expression.Body.ToString();

        // Log expBody here

        return await _context.Set<TEntity>().Where(expression).FirstOrDefaultAsync().ConfigureAwait(false);
    }

Приведенный выше код прекрасно работает при тестировании с жестко закодированным условием, подобным этому.

var blogs = await uow.Repository.FindFirstOrDefault<Blog>(x => x.BlogId == 1).ConfigureAwait(false);

Когда я отлаживаю, эта строка содержит expBody со значением (x.BlogId == 1)

Однако, если я сделаю сравнение с такой переменной:

int id = 1;
var blogs = await uow.Repository.FindFirstOrDefault<Blog>(x => x.BlogId == id).ConfigureAwait(false);

, я получу это для expBody:

(x.BlogId == value(TestProject.ValueService+<>c__DisplayClass4_0).intId)

Как получить фактическое тело выражения, например, когда я использую жестко закодированное значение, когда я на самом деле ссылаюсь на переменную?

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