Using Dates in Entity Framework

Tags: OpenGiving

So how do you query in the text-based Where clause of an LINQ to Entity query?   This question drove me up the wall!   I'm used to the CONVERT function, or just passing a string, or with a full-on LINQ query, using a DateTime object.   With an EntityDataSource, though, you specify the where clause using the Where property which is a string.

First, I couldn't even figure out how to refer to a column.   €œIsCancelled € (my column name) didn't work.   The Visual Studio expression editor did not help one bit.   Finally, I came across some samples.   You need to prefix your columns/properties with €œit €.   Iterator, I guess.   So my clause can say €œit.IsCancelled == false € and it works.

The next part was trying to deal with a DateTime.   I couldn't include a date in quotes, surrounded by hash marks, or in any ToString representation.   The trick, it turns out, is the CAST function.   This isn't a T-SQL function.   This is specific to the framework.   You don't use it like convert, changing to datetime.   You actually cast it to System.DateTime.   The syntax is: CAST(date_string as System.DateTime).   For example: CAST(DateTime.Today as System.DateTime).   Not what I expected!

My final Where clause ended up as:

DSEvents.Where = "it.IsCancelled == false and it.startTime > CAST('" + DateTime.Today + "' as System.DateTime)";

1 Comment

  • Daniel Martini said

    Thanks much for this post. I had been looking for this answer this afternoon and had found many other bizarre, arcane solutions. This is simple and clean and just what I needed to see.

Add a Comment