反射实体T,非datetime字段反射获取表达式树
public
static Expression<Func<T,
bool>> GetSearchExpression<T>(
string SearchString)
{
Expression<Func<T, bool>> filter = null;
if ( string.IsNullOrEmpty(SearchString)) return null;
var left = Expression.Parameter( typeof(T), " m ");
Expression expression = Expression.Constant( false);
T obj = default(T);
var type = typeof(T);
obj = (T)Activator.CreateInstance(type);
var propertyInfos = type.GetProperties();
foreach ( var propertyInfo in propertyInfos)
{
if (propertyInfo.Name.ToLower() == " id " || propertyInfo.PropertyType == typeof(DateTime)) continue;
Expression tostring = Expression.Call
(
Expression.Property(left, typeof(T).GetProperty(propertyInfo.Name).Name),
typeof( object).GetMethod( " ToString ", new Type[] { })
);
Expression right = Expression.Call
(
tostring,
typeof( string).GetMethod( " Contains ", new Type[] { typeof( string) }),
Expression.Constant(SearchString)
);
expression = Expression.Or(right, expression);
}
filter = Expression.Lambda<Func<T, bool>>(expression, new[] { left });
return filter;
}
{
Expression<Func<T, bool>> filter = null;
if ( string.IsNullOrEmpty(SearchString)) return null;
var left = Expression.Parameter( typeof(T), " m ");
Expression expression = Expression.Constant( false);
T obj = default(T);
var type = typeof(T);
obj = (T)Activator.CreateInstance(type);
var propertyInfos = type.GetProperties();
foreach ( var propertyInfo in propertyInfos)
{
if (propertyInfo.Name.ToLower() == " id " || propertyInfo.PropertyType == typeof(DateTime)) continue;
Expression tostring = Expression.Call
(
Expression.Property(left, typeof(T).GetProperty(propertyInfo.Name).Name),
typeof( object).GetMethod( " ToString ", new Type[] { })
);
Expression right = Expression.Call
(
tostring,
typeof( string).GetMethod( " Contains ", new Type[] { typeof( string) }),
Expression.Constant(SearchString)
);
expression = Expression.Or(right, expression);
}
filter = Expression.Lambda<Func<T, bool>>(expression, new[] { left });
return filter;
}