2013-12-16 36 views
4

在Web应用程序中,我使用linq To Object查询来进行数据提取/合并。 为了让调试更容易,我想直接在生成的HTML中显示linq查询结构;像获取Linq To Objects查询的字符串表示形式

Bananas 
    ->Where color='blue' 
    ->Where size>'20cm' 
    ->Take 25 

事实上,表达式树的表示。

可能吗?怎么样?

+0

的[转换-AN-表达式树 - 源代码字符串](http://stackoverflow.com/questions/1402839/convert-an-expression-tree-to-source-code-可能重复字符串) – nawfal

回答

1

就叫ToString上查询。显然,你需要使用AsQueryable扩展方法已经建立起来的字符串作为IQueryable,而不是作为一个IEnumerable

此示例:

var list = new int[] { 1, 2, 3, 4, 5 }; 

var query = list.AsQueryable() 
    .Where(n => n % 2 == 0) 
    .Take(25); 

string querystring = query.ToString(); 

息率此字符串:。

System.Int32 []其中(n =>((N%2)== 0))取(25 )

如果它是重要的是你有自己特定的格式,而不是使用此默认格式,然后you can handle it on your own,但毕竟是打开的蠕虫一个相当大的即可;如果这就是你想要做的,确保你真的需要它。

+0

罗伊提供的解决方案可以满足我的需求,但这个似乎简单得多!谢谢 – eka808

2

你可以做到这一点,但你必须编写自己的表达式树访问者(一类从ExpressionVisitor派生)。也就是说,您必须编写遍历表达式树(即您的LINQ查询)的代码并构建所需的字符串。

更多关于表达式树的游客,看到http://msdn.microsoft.com/en-us/library/bb882521(v=vs.90).aspx

实际上,有,做大部分工作已经在网络上一个很有趣的例子:从罗伊的回答以下关于http://pelebyte.net/blog/2011/05/13/doing-simple-things-with-expressionvisitor/

0

,有actally铲球同样的问题,但阿洛斯一个CodePlex项目显示整个表达式树,以及最终得到的LINQ用简单的英语表达:

http://exprtreevisualizer.codeplex.com/

这其实看起来像一个可爱的小工具,尽管我不得不承认,我还没有在vs2012试过,但已经意识到了和在vs2010中看过。我不确定是否已经创建了vs2012的扩展版本,但这肯定与你提到的几乎相同。

相关问题