在Web应用程序中,我有linq To Object查询以进行数据提取/合并。 为了便于调试,我想直接在生成的HTML中显示linq查询结构;
之类的东西Bananas
->Where color='blue'
->Where size>'20cm'
->Take 25
确实是表达式树的表示。
有可能吗?怎么样?
答案 0 :(得分: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/
答案 1 :(得分:1)
只需在查询上调用ToString
即可。显然,您需要使用IQueryable
扩展方法将字符串构建为AsQueryable
,而不是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))。Take(25)
如果你有自己特定的格式,而不是使用这个默认格式,那么you can handle it on your own,这很重要,但这会打开一大堆蠕虫;如果你想做的话,请确保你真的需要它。
答案 2 :(得分:0)
http://exprtreevisualizer.codeplex.com/
这实际上看起来像一个不错的小工具,我必须承认,我没有尝试过vs2012但是已经注意并在vs2010中看了一下。我不确定是否已经为vs2012创建了扩展版本,但这肯定与你提到的非常相似。