返回值列表:
List<FYWZ_UserOprLogRecord> rlist = new List<FYWZ_UserOprLogRecord>();
首先需要添加Express的扩展类
public static class PredicateBuilder
{
/// <summary>
/// 机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> True<T>() { return f => true; }
/// <summary>
/// 机关函数应用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混应时写在OR后面的AND有效
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
}
}
第二步:需要首先初始化查询对象,因为是Lamda表达式,所以需要有对象,其中FYWZ_UserOprLogRecord就是对应的返回对象
var expressionwhere = PredicateBuilder.True<FYWZ_UserOprLogRecord>();
第三步:添加查询条件
if (!String.IsNullOrEmpty(searchUserName))
{
expressionwhere = expressionwhere.And(p => p.logUserName == searchUserName);
}
if (!String.IsNullOrEmpty(searchContent))
{
expressionwhere = expressionwhere.And(p => p.logContent.Contains(searchContent));
}
if (!String.IsNullOrEmpty(startTime))
{
DateTime stimedt = DateTime.Parse(startTime);
expressionwhere = expressionwhere.And(p => p.logTime >= stimedt);
}
if (!String.IsNullOrEmpty(endTime))
{
DateTime etimedt = DateTime.Parse(endTime).AddDays(1);
expressionwhere = expressionwhere.And(p => p.logTime < etimedt);
}
第四步:结果转换,如果直接是toList(),会报错
rlist = _context.FYWZ_UserOprLogRecord.Where(expressionwhere.Compile()).AsQueryable().OrderByDescending(o=>o.logTime).ToList();