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

以下代码工作正常

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栏。“; 传递最初从字符串派生的表达式的最佳方法是什么?

您必须手动构建表达式。

IIRC,LINQ101样本中有一个DynamicExpressions库,可以为您完成此任务。

除了删除lambda表示法之外, 动态linq示例可以执行大部分操作:

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

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

alt text http://sofzh.miximages.com/c%23/step2.png

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