最新评论
ahui 2011-12-19 10:06
[quote]天水三千:其实就是相当于你的多条件组合查询,我试过如果添加两个条件就会出错[/quote]
我上面回复的够清楚了吧+_+!
我的多条件查询是没有问题的
你的And的处理中和我的明显不一样
你的代码:
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
我贴的是:
var candidateExpr = Expression.Parameter(typeof(T), "candidate");
var parameterReplacer = new ParameterReplacer(candidateExpr);
var left = parameterReplacer.Replace(exp_left.Body);
var right = parameterReplacer.Replace(exp_right.Body);
var body = Expression.And(left, right);
return Expression.Lambda<Func<T, bool>>(body, candidateExpr);
[b]多个expressioins合并的时候,要把里面的Parameter名称统一[/b]
实在不行,你直接把我的代码复制过去执行吧
ahui 2011-12-16 20:43
[quote]天水三千:
我是这样写的,但是报错,只增加一个条件的时候就没事,添加两个以上就出错:
未将对象引用设置到对象的实例。
...[/quote]
你没有看完全,你的代码应该是从别的地方复制过来的吧
请参照类:ParameterReplacer
天水三千 2011-12-16 13:54
var where = PredicateExtensionses.True<PlatformAmount>();
where = where.Or(x => x.LogId == 1);
where = where.Or(x => x.LogId == 3);
var query = PlatformAmountService.Query<PlatformAmount>().Where(where).Count();
我是这样写的,但是报错,只增加一个条件的时候就没事,添加两个以上就出错:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 26: where = where.Or(x => x.LogId == 3);
行 27:
行 28: var query = PlatformAmountService.Query<PlatformAmount>().Where(where).Count();
行 29:
行 30: //if (true)
源文件: f:\2011\Demo\src\WebSite\Default.aspx.cs 行: 28
ahui 2011-12-16 10:20
@YzDever
可以有多次,查询条件不能太复杂,太复杂了比如你引用另一个自定义的方法,EF是不可能翻译成对应的SQL的
ahui 2011-12-01 11:03
改为:
WhereExp = WhereExp.And(u => u.Approved_OrderID == 1);
WhereExp = WhereExp.And(u => u.Approved_UserID == 1);
lention 2011-12-01 11:00
hi ahui,我用了下你写的这种方法,但是为什么每一次我都会把所有的记录查出来呢?貌似参数Expression<Func<T, bool>> where并未起到过滤的作用。以下是我调用的代码段
WhereExp.And(u => u.Approved_OrderID == 1);
WhereExp.And(u => u.Approved_UserID == 1);
actual = target.GetApprovedByCondition(WhereExp, OrderByString, Ascending, PageIndex, PageSize, ref Msg);
数据库中有三条记录,但同时满足上面两个条件的只有一条,而我查询出来的结果却有三条。如有空,请解答之。谢谢!!!

