查询 “从 203-10-10 到 2013-11-10”,EF表达式该如何写,,,求大神指点,,,,,。。。
1:你可以直接用linq的where 2:也可以把查询条件直接传进去,可以用委托
返回集合后再在集合里where吧,泛型儿List有自带的查询的。
/// <summary>
/// 建立 LessThan ( 小于 ) 查询条件
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="q">动态查询条件创建者</param>
/// <param name="property">属性</param>
/// <param name="value">查询值</param>
/// <returns></returns>
public static ISpecification<T> LessThan<T, P>(this ISpecification<T> q, Expression<Func<T, P>> property, P value)
{
var parameter = property.GetParameters();
var constant = Expression.Constant(value);
Type type = typeof(P);
Expression nonNullProperty = property.Body;
//如果是Nullable<X>类型,则转化成X类型
if (IsNullableType(type))
{
type = GetNonNullableType(type);
nonNullProperty = Expression.Convert(property.Body, type);
}
var methodExp = Expression.LessThan(nonNullProperty, constant);
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(methodExp, parameter);
q.Predicate = q.Predicate.And(lambda);
return q;
}。你也可以参考这个,这是扩展的。基于Linq表达式的。
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(methodExp, parameter);这个我用的比较多一些,做多条件查询挺好,自己用委托构建lambda表达式,楼主可以结贴了
@稳稳的河: 是的,封装一下,还是很不错的。
var start =DateTime.Parse("2013-10-10").Date;
var end=DateTime.Parse("2013-11-10").Date;
ctx.Tables.Where(t=>t.CreateTime>=start && t.CreateTime<=end)
先将字符串转换成时间格式的,然后用Lambda表达式查询就是了。楼上正解。。