#sql-server #entity-framework-core #string.format
#sql-сервер #entity-framework-core #string.format
Вопрос:
Этот запрос работает правильно:
var results = _mp4Db.Videos.FromSql(
"Select *
from Video
where isValid = 1
and (contains(Subject,'"" text "" '*' ""')
or contains(Description,'"" text "" '*' ""'))
order by
case
when contains(Subject,'"" text "" '*' ""')
then 1
else 2
end,
len(Subject)
offset 20 rows fetch next 20 rows only ");
Но если я использую string.Format
для более четкого кода, он не возвращает результат, который должен:
var results = _mp4Db.Videos.FromSql(
"Select *
from Video
where isValid=1
and (contains(Subject,'"{0}{1}"')
or contains(Description,'"{0}{1}"'))
order by case
when contains(Subject,'"{0}{1}"')
then 1
else 2 End ,
LEN(Subject)
Offset 20 rows fetch next 20 rows only ", text, '*');
Есть идеи, чего здесь не хватает?
Комментарии:
1.Я не вижу ничего
string.Format
в вашем втором примере — простого добавления таких заполнителей{0}
недостаточно — вы должны использоватьstring.Format()
явно2. Да, не заметил, что он был преобразован с помощью автоматической коррекции Resharper, спасибо!
Ответ №1:
Попробуйте использовать $
operator и выполнить запрос, вызвав .ToList()
метод:
var results = _mp4Db.Videos.FromSql(
$"Select * from Video where isValid=1 and (contains(Subject,'"{text}{'*'}"') "
$"or contains(Description,'"{text}{'*'}"')) "
$"order by case when contains(Subject,'"{text}{'*'}"') then 1 "
$"else 2 End , LEN(Subject) Offset 20 rows fetch next 20 rows only "
).ToList();