Reputation: 4723
The following code works fine
using (var ctx = new MyEntities())
{
var devices = ctx.Devices
.Where(x=> x.Device == "TEST")
.ToList();
return devices;
}
What I would like to do is to pass in the expression that goes in the “Where” clause. I see that it can take a string but the following throws an error:
String expression = "x=> x.Device == \"TEST\"" ;
using (var ctx = new MyEntities())
{
var devices = ctx.Devices
.Where(expression)
.ToList();
return devices;
}
The error message at runtime is “The query syntax is not valid. Near term '>', line 6, column 4.”; What would be the best way to pass in an expression that is initially derived from a string?
Upvotes: 3
Views: 3930
Reputation: 1064104
The dynamic linq sample can do much of this, except you drop the lambda notation:
String expression = "Device == \"TEST\"" ;
//... etc
.Where(expression)
Another example (from the blog):
(source: scottgu.com)
Upvotes: 2
Reputation: 53446
I don't think Where
can take a string as parameter. Dynamic Linq lets you pass queries as strings, though probably not in the specific format you're trying to do above. Depending on what exactly it is you are trying to achieve, it might be worth a look.
Upvotes: 2
Reputation: 117330
You have to build the Expression manually.
IIRC, there is a DynamicExpressions library in the LINQ101 samples that can do this for you.
Upvotes: 3