Передача выражения Linq в виде строки? - PullRequest
3 голосов
/ 19 июля 2010

Следующий код работает нормально

        using (var ctx = new MyEntities())
        {
            var devices = ctx.Devices
               .Where(x=> x.Device == "TEST")
               .ToList();
            return devices;
        }

Что я хотел бы сделать, это передать выражение, которое входит в предложение «Где».Я вижу, что он может принимать строку, но следующее выдает ошибку:

        String expression = "x=> x.Device == \"TEST\"" ;

        using (var ctx = new MyEntities())
        {
            var devices = ctx.Devices
               .Where(expression)
               .ToList();
            return devices;
        }

Сообщение об ошибке во время выполнения: «Синтаксис запроса недопустим.Ближайший термин «>», строка 6, столбец 4 »;Как лучше всего передать выражение, которое изначально получено из строки?

Ответы [ 3 ]

3 голосов
/ 19 июля 2010

Вы должны построить выражение вручную.

IIRC, в примерах LINQ101 есть библиотека DynamicExpressions, которая может сделать это для вас.

2 голосов
/ 19 июля 2010

Я не думаю, что Where может принять строку в качестве параметра. Dynamic Linq позволяет передавать запросы в виде строк, хотя, вероятно, не в том формате, который вы пытаетесь сделать выше.В зависимости от того, что именно вы пытаетесь достичь, это может стоить посмотреть.

2 голосов
/ 19 июля 2010

Пример динамического linq может многое из этого сделать, кроме случаев, когда вы отбрасываете лямбда-нотацию:

String expression = "Device == \"TEST\"" ;

//... etc

    .Where(expression)

Другой пример (из блога):

альтернативный текст http://www.scottgu.com/blogposts/dynquery/step2.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...