我有这段代码:
string name ="M";
Expression<Func<Organization, bool>> getExpression1 = r => r.Name.Contains(name);
Expression<Func<Organization, bool>> getExpression2 = r => r.Name.Contains("M");
GetOrgListBy(getExpression);
GetOrgListBy(getExpression2);
public IEnumerable<Organization> GetOrgListBy(Expression<Func<Organization, bool>> filter)
{
return DataContext.Parties.OfType<Organization>().Where(filter).ToList();
}
问题:
我将一个简单的表达式传递给存储库函数
通过匹配传递的名称获得List<Organization>
。
当我查看getExpression1
的sql跟踪(使用字符串变量)时,表达式生成[Name] like plinq_variable
sql语句
省略了%
运算符。我的目的是生成一个
[Name] like '%' + plinq_variable + '%'
sql语句
但是,当我使用getExpression2
(硬编码字符串)时,表达式成功
生成[Name] like N'%M%'
sql语句。
为什么不getExpression1
生成%
运算符?
如何在sql中生成%
运算符,就像getExpression2
一样?
答案 0 :(得分:0)
第一个表达式转换为参数化SQL查询。 Where子句中的变量......
[Name] like plinq_variable
...设置为值
@plinq_variable=N'%M%'
执行查询时。第二个表达式转换为带有硬编码字符串文字的SQL查询:
[Name] like N'%M%'
然后直接执行此查询。
表达式和查询的结果是相同的。