Где предложение в синтаксисе метода терпит неудачу при объединении строк - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь получить запись из базы данных, используя Entity Framework и LINQ.Он работает в основном так, как ожидалось, но из-за ошибки с оператором WHERE я не могу понять.

var nodeId = "001";

//This works and returns the record I am looking for
var nodeDisplayName = ("#" + nodeId);
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == nodeDisplayName).ToList();

//This does not work and returns 0 results
var filteredNodes2 = dbContext.Node.Where(n => n.DisplayName == ("#" + nodeId )).ToList();

Я бы ожидал, что два варианта будут вести себя точно так же, и, похоже, еслиЯ запускаю их в списке в памяти.Но при работе с сущностью / базой данных они ведут себя по-разному.Я могу легко исправить ошибку, просто используя первый метод, но я хотел бы понять, что вызывает разницу в поведении.

РЕДАКТИРОВАТЬ

Итак, сгенерированный SQLзапросы выглядят так:

SELECT `n`.`id`, `n`.`display_name`, `n`.`reg_tms`
FROM `tablename`.`node` AS `n`
WHERE `n`.`display_name` = '#001'

SELECT `n`.`id`, `n`.`display_name`, `n`.`reg_tms`
FROM `tablename`.`node` AS `n`
WHERE `n`.`display_name` = ('#' + '001')

Так что все проясняется.Я предполагал, что Entity Framework объединит строки перед генерацией запроса.

1 Ответ

0 голосов
/ 04 января 2019

Я собираюсь продолжить работу с комментариями, вашим первоначальным вопросом и вашими выводами, которые вы отметили в качестве редактирования своего поста, - и я думаю, что цель состояла в том, чтобы преобразовать ваши первоначальные два утверждения в одно утверждение.

// code to refactor into a single statement
var nodeDisplayName = ("#" + nodeId);
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == nodeDisplayName).ToList();

Это может быть изменено на ...

// solution (refactored)
var filteredNodes = dbContext.Node.Where(n => n.DisplayName == $"#{nodeId}").ToList();

Я первоначально отметил свой ответ как комментарий, но новый синтаксис, возможно, не выделился как ответ для васпервоначально.Надеюсь, это поможет.

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