I'm using the dynamic LINQ library by Scott Guthrie together with Entity Framework and C#.
I have to build my where string into a variable based on several factors and then pass the string variable to the where clause. For some reason, this will work:
ContactList = ContactList.Where("DateAdded >= @0", DateTime.Parse("12/1/2012"));
But this will not work
string WhereClause = string.Format("DateAdded >= {0}", DateTime.Parse("12/1/2012"));
ContactList = ContactList.Where(WhereClause);
As mentioned, I need to use it in the version of passing the variable. Anyone know why the second doesn't work?
Thanks in advance!
I was able to get it working with a slightly different string format using the information here.
Doing this worked fine for me:
ContactList.Where("DateAdded >= DateTime(2013, 06, 18)")
Note this does not work at all with DateTimeOffset
columns.
It seems what I was trying to do is not possible with the current DynamicLINQ library. The reason it didn't work was well outlined below by Tilak.
My solution was to modify the DynamicLINQ library to allow the query to be written as a string and passed to the where clause for Date/Time datatypes. The modification was found here by Paul Hatcher: LINQ TO SQL, Dynamic query with DATE type fields
ObjectQuery.Where overload accepts 2 parameters.
string predicate
params ObjectParameter[] parameters
In your first example, Where
builds the query (where clause) using ObjectParameter
parameters (using Name, Type and Value of ObjectParameter
)
In your second example, whatever is passed is treated as final where clause (no internal conversion based on datatype of passed parameters done).
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