具有为空的DateTime和DateAdd的OrmLite条件

问题描述 投票:1回答:1

我正在努力完成

SELECT * FROM Employee WHERE EnrollmentDate > DATEADD(Month, 1, HireDate)

不幸的是,HireDate是可为空的,因此OrmLite将无法生成此查询。

var query = db.From<Employee>()
    .Where(employee => employee.EnrollmentDate > employee.HireDate.Value.AddMonths(1))
);

我尝试使用哪个仍然失败

.Where(employee => employee.HireDate.HasValue && employee.EnrollmentDate > employee.HireDate.Value.AddMonths(1))
c# ormlite-servicestack
1个回答
0
投票

我遇到了同样的问题,发现它失败了

ServiceStack.OrmLite

SqlExpression.GetQuotedColumnName(ModelDefinition tableDef,字符串memberName)

(查看图片)

这会失败,并显示“ NullReferenceException:对象引用未设置为对象的实例。”

using (var db = _stagingConnectionFactory.Open())
{
    var query = db.From<tblActivityImportCalculationQueue>();

    query = query.Where(i => 
        (DateTime.Now - i.LastUpdated.Value).TotalMinutes > 30
    );

    query.ToMergedParamsSelectStatement();
}

在OrmLite中修复此错误之前,对我来说,解决方案是使用普通sql

using (var db = _stagingConnectionFactory.Open())
{
    var query = db.From<tblActivityImportCalculationQueue>();

    query = query.Where("DATEDIFF(minute, LastUpdated, GETDATE()) > 30");

    query.ToMergedParamsSelectStatement();
}

tableDef is null

© www.soinside.com 2019 - 2024. All rights reserved.