在Web应用程序中,我使用linq To Object查询来进行数据提取/合并。 为了让调试更容易,我想直接在生成的HTML中显示linq查询结构;像获取Linq To Objects查询的字符串表示形式
Bananas
->Where color='blue'
->Where size>'20cm'
->Take 25
事实上,表达式树的表示。
可能吗?怎么样?
在Web应用程序中,我使用linq To Object查询来进行数据提取/合并。 为了让调试更容易,我想直接在生成的HTML中显示linq查询结构;像获取Linq To Objects查询的字符串表示形式
Bananas
->Where color='blue'
->Where size>'20cm'
->Take 25
事实上,表达式树的表示。
可能吗?怎么样?
就叫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,但毕竟是打开的蠕虫一个相当大的即可;如果这就是你想要做的,确保你真的需要它。
罗伊提供的解决方案可以满足我的需求,但这个似乎简单得多!谢谢 – eka808
你可以做到这一点,但你必须编写自己的表达式树访问者(一类从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/
,有actally铲球同样的问题,但阿洛斯一个CodePlex项目显示整个表达式树,以及最终得到的LINQ用简单的英语表达:
http://exprtreevisualizer.codeplex.com/
这其实看起来像一个可爱的小工具,尽管我不得不承认,我还没有在vs2012试过,但已经意识到了和在vs2010中看过。我不确定是否已经创建了vs2012的扩展版本,但这肯定与你提到的几乎相同。
的[转换-AN-表达式树 - 源代码字符串](http://stackoverflow.com/questions/1402839/convert-an-expression-tree-to-source-code-可能重复字符串) – nawfal