Необработанный SQL-запрос в Entity Framework Core не работает должным образом при использовании string.Format - PullRequest
2 голосов
/ 08 апреля 2019

Этот запрос работает правильно:

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 Ответ

0 голосов
/ 08 апреля 2019

Попробуйте использовать оператор $ и выполните свой запрос, вызвав .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();
...