傳回值清單:
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();