在传统的sql中,我们可以根据if语句链接表达式。
例如,假设我有变量名为" 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
答案 0 :(得分:4)
更改为方法语法而不是查询语法,链接很容易。
var query = user.Select(u => u);
if(firstname!="")
query = query.Where(u => u.firstname = firstname);
查询语法中的查询是在编译时转换的,因此没有一种机制可以在运行时使用查询语法“注入”sql。