В традиционном sql мы можем связать выражение в соответствии с утверждениями if.chain string expression linq
, например, позволяет сказать, что у меня есть переменная «FirstName», и я хочу, чтобы получить из базы данных всех пользователей в соответствии со значением в этой переменной (если пусто получить все пользователи)
поэтому я цепь SQL-строку, как что
string sql="";
if(firstname!="")
sql=String.format(" And firstname='{0}',firstName)
.ExecuteReader(System.Data.CommandType.Text,"select * from users where 1=1" + sql)
Есть ли способ скопировать эту технику в выражение linq?
что-то вроде
from U in user
where 1=1 & sql
select U
Это определенно * не * хорошая практика с SQL. На самом деле, конкатенация строк считается очень плохой практикой, поскольку она предоставляет вам атаки SQL Injection, приводит к низкой производительности * и *, сложнее писать и поддерживать, чем параметризованные запросы. LINQ действительно позволяет осуществлять реальную цепочку, например, просто добавляет '.Where()' вызовы запроса один за другим. Результатом будет правильный SQL-оператор без ifs или '1 = 1' трюков –
@Panagiotis Kanavos, конечно, я использую параметризованные запросы, это просто краткий пример, чтобы представить идею – baaroz