我用下面的拼接的方式查询出来的结果怎么都不对,始终有11条记录。
这儿的expression的and 是如下代码:
/// <summary> /// Combines the first predicate with the second using the logical "and". /// </summary> public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second) { return first.Compose(second, Expression.AndAlso); }
其实我传入的提交执行到最后的,应该是执行这样的一个查询:
select * from gg_Model where gg_localType = 4 and gg_appID = 8170 and gg_Name like '%1%'
这个SQL语句执行查询的只有一个记录,但是程序里面的提交拼接查询就有11个记录,求大神指点,
我这个怎么调试呢,我打断点进去都不知道怎么看,看错在哪里了呢
你的这个逻辑写错了
foreach(var expression in list)
{
productQueryTotal = expression.And(expression);
}
要改成
foreach(var expression in list)
{
if(null == productQueryTotal)
{
productQueryTotal = expression.And(expression);
}
else
{
productQueryTotal = productQueryTotal.And(expression);
}
}
我随便说三个方法吧
1、安装一个“表达式树查看器”,看看生成的Expression是啥样的,或者你断点看看,虽然抽象一点,好象也能看出点啥来。
2、DataContext是可以输出打算生成的SQL语句到LOG里面的。方法自己Google
3、假设你用的是SQL SERVER吧,SQL SERVER有一个工具叫SQL Profile,可以看到执行的SQL语句,
虽然LINQ拼出来的SQL语句很那个来着,不过仔细一点看也是能看出WHERE对不对的。