ServiceStack Ormlite SqlExpressionVisitor null check in Where extension

mus*_*ran 6 servicestack ormlite-servicestack

我想用Orqlite的SqlExpressionVisitor编写一个使用null cheking参数查询表的方法这是我的方法:

public static List<UserChatsDTO> GetUserChats(int startRow, int rowCount, DateTime? startDate, DateTime? endDate, string operatorName, short? rating, string visitorName)
        {
            using (IDbConnection db = DbFactory.OpenDbConnection())
            {
                SqlExpressionVisitor<UserChatsDTO> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<UserChatsDTO>();
                ev.Where(q => 
                    (startDate.HasValue && q.Dated >= startDate) && 
                    (endDate.HasValue && q.Dated <= endDate) &&
                    (!string.IsNullOrEmpty(operatorName) && q.TakenByUser.Contains(operatorName)) &&
                    (rating.HasValue && q.Rating == (short)rating) &&
                    (!string.IsNullOrEmpty(visitorName) && q.VisitorName.Contains(visitorName)));
                //ev.OrderBy();
                ev.Limit(startRow, rowCount);
                return db.Select<UserChatsDTO>(ev);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是Object引用未设置为对象的实例.当我调用ev.Where部分时抛出NullReferenceException.

这里有错误还是我错过了什么?谢谢.

Mas*_*ity 5

您实际上可以在Select方法中构建ExpressionVisitor,如下所示:

var chats = db.Select<UserChatsDTO>(q => q
    .Where(x => startDate.HasValue && x.Date >= startDate)
    .Where(x => endDate.HasValue && x.Date <= endDate)
    .Where(x => string.IsNullOrEmpty(operatorName) || x.TakeByUser.Contains(operatorName))
    .Where(x => rating.HasValue && x.Rating == (short)rating)
    .Where(x => string.IsNullOrEmpty(visitorName) || x.VisitorName.Contains(visitorName)
    .Limit(startRow, rowCount));
Run Code Online (Sandbox Code Playgroud)