110,571
社区成员
发帖
与我相关
我的任务
分享
protected IQueryable<T> WhereList<T>(IQueryable<T> query, string name, string value)
{
PropertyInfo sortProperty = null;
if (!string.IsNullOrEmpty(name))
{
sortProperty = typeof(T).GetProperty(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
}
if (string.IsNullOrEmpty(value))
return query;
if (sortProperty == null)
throw new Exception("对像上不存在" + sortProperty + "的字段");
ParameterExpression param = Expression.Parameter(typeof(T), "x");
Expression left = Expression.Property(param, typeof(T).GetProperty(name));
Type tp = typeof(T).GetProperty(name).PropertyType;
//判断类型是否为泛型,因为nullable是泛型类,
if (tp.IsGenericType &&
//判断是否为nullable泛型类
tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
//如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
NullableConverter nullableConverter = new NullableConverter(tp);
//将tp转换为nullable对的基础基元类型
tp = nullableConverter.UnderlyingType;
}
Expression right = Expression.Constant(Convert.ChangeType(value, tp));
Expression filter = Expression.Equal(left, right);
Expression pred = Expression.Lambda(filter, param);
Expression expr = Expression.Call(typeof(Queryable), "Where",
new Type[] { typeof(T) },
Expression.Constant(query), pred);
query = query.Provider.CreateQuery<T>(expr);
return query;
}
Type t = this.GetType();
if (t.BaseType.GetGenericTypeDefinition() == typeof (Nullable<>))
{
}
object resultvalue;
//判断类型是否为泛型,因为nullable是泛型类,
if (tp.IsGenericType &&
//判断是否为nullable泛型类
tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
//如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
NullableConverter nullableConverter = new NullableConverter(tp);
resultvalue = nullableConverter.ConvertFromString(value);
}
else
{
resultvalue = Convert.ChangeType(value, tp);
}
Expression right = Expression.Constant(resultvalue);
object resultvalue;
//判断类型是否为泛型,因为nullable是泛型类,
if (tp.IsGenericType &&
//判断是否为nullable泛型类
tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
//如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
NullableConverter nullableConverter = new NullableConverter(tp);
resultvalue = nullableConverter.ConvertFromString(value);
}
else
{
resultvalue = Convert.ChangeType(value, tp);
}
object resultvalue;
//判断类型是否为泛型,因为nullable是泛型类,
if (tp.IsGenericType &&
//判断是否为nullable泛型类
tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
//如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
NullableConverter nullableConverter = new NullableConverter(tp);
resultvalue = nullableConverter.ConvertFromString(value);
}
else
{
resultvalue = Convert.ChangeType(value, tp);
}
if (tp.IsGenericType &&
//判断是否为nullable泛型类
tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
right = Expression.Constant(Convert.ChangeType(value, tp.GetGenericArguments()[0]));
right = Expression.Convert(right, tp);
}
else
{
right = Expression.Constant(Convert.ChangeType(value, tp));
}