将Linq表达式作为字符串传递?

3
以下代码运行正常。
        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;
        }

在运行时,错误信息是“The query syntax is not valid. Near term '>', line 6, column 4.”;最好的方法是如何传递最初从字符串导出的表达式?
3个回答

3

你需要手动构建表达式。

如果我没记错的话,在LINQ101示例中有一个DynamicExpressions库可以为你完成这项工作。


2

动态 LINQ 示例可以完成大部分工作,除了您不需要使用 lambda 表示法:

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

//... etc

    .Where(expression)

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

alt text
(来源:scottgu.com


(注:该段文字含有HTML标签,翻译仅供参考。)

2

我认为Where不能以字符串作为参数。然而动态 Linq可以让你将查询作为字符串传递,但可能无法按照你上述尝试的特定格式进行。根据你想要实现什么,这可能值得一试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接