将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允许您将查询作为字符串传递,但可能不是您尝试在上面执行的特定格式。 根据您想要实现的目标,可能值得一看。

  • 堆栈跟踪上的行号错误
  • 在c#中构建一个简单,高性能的树数据结构
  • 使用OpenID进行网站身份validation
  • 如何以编程方式将M4A文件转换为MP3或WMA文件?
  • 使用Generics获取随机数据
  • 加密C#中web.config文件中的连接字符串
  • 接口作为返回类型
  • C#6结构中的无参数构造函数
  • C#被认为是无上下文的语言吗?
  • 获取航空窗口颜色
  • HtmlAgilityPack文档