获取Linq To Objects查询的字符串表示形式

eka*_*808 5 c# linq debugging expression-trees

在Web应用程序中,我有linq To Object查询来进行数据提取/合并.为了便于调试,我想直接在生成的HTML中显示linq查询结构; 就像是

Bananas
  ->Where color='blue'
  ->Where size>'20cm'
  ->Take 25
Run Code Online (Sandbox Code Playgroud)

实际上,表达树的表示.

可能吗?怎么样?

Ser*_*rvy 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();
Run Code Online (Sandbox Code Playgroud)

产生这个字符串:

System.Int32[].Where(n => ((n % 2) == 0)).Take(25)

如果您拥有自己的特定格式而不是使用默认格式很重要,那么您可以自己处理它,但这会打开一个相当大的蠕虫罐;如果您想做的话,请确保您确实需要它。