using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Linq.Expressions;
using LinqKit;
using System.Reflection;
using Model.DataModel;
namespace MVC_EASYUI_TEST.Code
{
public enum em查询条件类型
{
等于,
不等于,
大于,
大于等于,
小于,
小于等于,
like,
notlike
}
public class WebHelper
{
static JavaScriptSerializer JsonSerializer = new JavaScriptSerializer();//json转换类
public static string Json(object obj)
{
return JsonSerializer.Serialize(obj);
}
public static void Condition<T>(ref Expression<Func<T, bool>> condition, string fieldName, string fieldValue, em查询条件类型 queryType)
{
ParameterExpression param = Expression.Parameter(typeof(T), "c");
if (string.IsNullOrEmpty(fieldName)||condition==null)
{
return;
}
if (typeof(T).GetProperty(fieldName)==null)
{
throw new Exception("字段名不存在,请检查!");
}
Expression left = Expression.Property(param, typeof(T).GetProperty(fieldName));
Expression right = Expression.Constant(fieldValue);
Expression filter = null;
switch (queryType)
{
case em查询条件类型.等于:
filter=Expression.Equal(left, right);
break;
case em查询条件类型.不等于:
filter=Expression.NotEqual(left, right);
break;
case em查询条件类型.大于:
filter = Expression.GreaterThan(left, right);
break;
case em查询条件类型.大于等于:
filter = Expression.GreaterThanOrEqual(left, right);
break;
case em查询条件类型.小于:
filter = Expression.LessThan(left, right);
break;
case em查询条件类型.小于等于:
filter = Expression.LessThanOrEqual(left, right);
break;
case em查询条件类型.like:
filter =Expression.Call(left, typeof(string).GetMethod("Contains"), right);
break;
case em查询条件类型.notlike:
filter = Expression.Not(Expression.Call(left, typeof(string).GetMethod("Contains"), right));
break;
default:
filter = Expression.Equal(left, right);
break;
}
Expression<Func<T, bool>> finalExpression = Expression.Lambda<Func<T, bool>>(filter, param);
condition = condition.And<T>(finalExpression);
}
}
}
使用:
controller方法中
//查询条件
Expression<Func<NewUser, bool>> searchPredicate = PredicateBuilder.True<NewUser>();
WebHelper.Condition<NewUser>(ref searchPredicate,"UserName", username, em查询条件类型.like);
NewUser user = userBll.GetSingle(searchPredicate);//自己写方法 支持Expression<Func<NewUser, bool>> 查询,可以参考我以前文章