views:

74

answers:

3

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?

+2  A: 

You have to build the Expression manually.

IIRC, there is a DynamicExpressions library in the LINQ101 samples that can do this for you.

leppie
+2  A: 

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):

alt text

Marc Gravell
Eeeewweeee! Picture code!!!! My eyes!! ;P
leppie
+1  A: 

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.

fearofawhackplanet