首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分析字符串C# LINQ表达式

分析字符串C# LINQ表达式
EN

Stack Overflow用户
提问于 2010-09-24 05:07:29
回答 2查看 14.2K关注 0票数 15

我试图在这里做一些真正的动态查询-最好不要在运行时调用编译器。

我有一个包含LINQ表达式的字符串,例如

代码语言:javascript
运行
复制
var s = "from a in queryable where a.Type == 1 select a";

如何才能从中获得结果IQueryable或表达式呢?

我见过LINQPad和RavenDb都这样做,所以我相信有一种方法,只是我还没有找到。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-24 05:13:05

您有一些选项:

  1. 做了一些自己开发的事情,解析文本并构建表达式树。这样做的标准方法是使用语言解析器来解析字符串(如ANTLR).
  2. Use CodeDOM )来编译查询(不建议用于生产环境,因为这样做很慢,并且每次编译都会生成一个程序集,如果您使用了很多程序集,这将使您的AppDomain充满程序集。我要强调的是,如果你有任何类型的量,不要走这条路--尽管这是LINQPad所做的)- http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/6a4defd2-76f0-4865-97b7-130e4ba7b50a
  3. Use Mono的编译器直接发出MSIL (所以每次编译没有汇编,速度更快)- Mono Compiler as a Service (MCS)
  4. Use Dynamic LINQ (有一些限制和限制,但基本上做了第一点中建议的事情,很好,轻量级,并且能够只允许某些方法调用)。它解析文本查询并根据它构建表达式树)- http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
票数 20
EN

Stack Overflow用户

发布于 2010-09-24 05:17:15

从一个“魔术字符串”到编码对象总是涉及到某种解析。在这种情况下,最好使用EditableExpression库(可从Google Code免费获得)。获取您的字符串,并将其格式化为序列化一系列EditableExpressions的结果。然后,简单地反序列化它并将其转换为表达式树。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3782538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档