2013-12-16 3 views
4

В веб-приложении у меня есть запрос linq To Object для извлечения/консолидации данных. Чтобы облегчить отладку, я хотел бы показать непосредственно в сгенерированном HTML структуру запросов linq; что-то вродеПолучить строковое представление запроса Linq To Objects

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

Действительно, представление дерева выражений.

Возможно ли это? Как?

+0

Возможный дубликат [convert-an-expression-tree-to-source-code-string] (http://stackoverflow.com/questions/1402839/convert-an-expression-tree-to-source-code- строка) – nawfal

ответ

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 [] где (п => ((п% 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

Исходя из ответа Роя, есть вынашивал CodePlex проект, который решает ту же проблему, но ALOS показывает полное выражение дерева , а также в результате окончательное выражение в простом LINQ английском:

http://exprtreevisualizer.codeplex.com/

это на самом деле выглядит как миленький инструмент, Тхо я должен признаться, я не пробовал в vs2012, но были известны и посмотрел в vs2010. Я не уверен, были ли расширены версии для vs2012, но это, безусловно, делает в значительной степени то, что вы упоминаете.

Смежные вопросы