【问题标题】:Passing a Linq expression as a string?将 Linq 表达式作为字符串传递?
【发布时间】:2019-08-03 07:08:21
【问题描述】:

以下代码运行良好

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

我想做的是传入“Where”子句中的表达式。我看到它可以接受一个字符串,但以下会引发错误:

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

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

运行时的错误消息是“查询语法无效。近期'>',第 6 行,第 4 列。”;传递最初从字符串派生的表达式的最佳方法是什么?

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    您必须手动构建表达式。

    IIRC,LINQ101 示例中有一个 DynamicExpressions 库可以为您执行此操作。

    【讨论】:

      【解决方案2】:

      我不认为Where 可以将字符串作为参数。 Dynamic Linq 允许您将查询作为字符串传递,尽管可能不是您在上面尝试执行的特定格式。根据您要达到的具体目标,可能值得一看。

      【讨论】:

        【解决方案3】:

        dynamic linq sample 可以做很多这样的事情,除了你放弃 lambda 符号:

        String expression = "Device == \"TEST\"" ;
        
        //... etc
        
            .Where(expression)
        

        另一个例子(来自博客):


        (来源:scottgu.com

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多