GetTodayItemCount() attempts to get today's item count using CreatedDtt in the Items model. Because CreatedDtt is a Nullable Datetime (DateTime?), I use a ternary operator within the Where's lambda expression to make sure I am not trying to access the date of a null value later on in my equality comparison.
However, I still get the classic NullReferenceException? Object reference not set to an instance of an object error, and I can confirm that row.CreatedDtt.Value.Date is where the issue is at.
public Int64 GetTodayItemCount()
{
OrmLiteConnectionFactory dbFactory = new OrmLiteConnectionFactory(dbConn, SqlServerDialect.Provider);
using (IDbConnection db = dbFactory.Open())
{
SqlExpression<Items> itemMatch = db.From<Items>()
.Where(row =>
(row.CreatedDtt.HasValue ?
row.CreatedDtt.Value.Date : DateTime.MinValue) == DateTime.Today
);
Int64 itemCount = db.Count(itemMatch);
db.Close();
return itemCount;
}
}
How is row.CreatedDtt.Value.Date being accessed when I am checking for its valid value beforehand, and how can I accomplish the desired outcome of GetTodayItemCount() without getting a NullReferenceException error?
Since the solution doesn't seem to be as straightforward as I had predicted, I am adding the stack trace below in case there is any use in it:
at ServiceStack.OrmLite.SqlExpression`1.GetQuotedColumnName(ModelDefinition tableDef, String memberName)
at ServiceStack.OrmLite.SqlExpression`1.GetMemberExpression(MemberExpression m)
at ServiceStack.OrmLite.SqlExpression`1.VisitMemberAccess(MemberExpression m)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitLambda(LambdaExpression lambda)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.AppendToWhere(String condition, Expression predicate)
at ServiceStack.OrmLite.SqlExpression`1.Where(Expression`1 predicate)
at GroupRedemptionsScanner.DBHandlers.GetTodayItemCount() in [directory/file/line number etc]
You can't apply C# logic to RDBMS Server columns. If you want to test fuzzy precision data types like Dates you should use a range instead, e.g:
.Where(row => row.CreatedDtt != null &&
row.CreatedDtt >= DateTime.Now.Date &&
row.CreatedDtt < DateTime.Now.Date.AddDays(1)));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With