Могу ли я добавить компилятор linq в свой проект?

#.net #linq-to-sql #.net-3.5 #compiler-construction

#.net #linq-to-sql #.net-3.5 #компилятор-построение

Вопрос:

Я хотел бы разрешить некоторым нашим бизнес-аналитикам писать на linq вместо SQL, где это применимо. Корпорация никогда бы не согласилась разрешить установку linqpad, так с чего бы мне начать изучение того, как разрешить, скажем, простые запросы linq или выражения в проекте vs2008?

Существует ли какой-либо тип функции eval() для .net, которая компилировала бы и запускала выражение linq?

Ответ №1:

Взгляните на это руководство по динамически выполняемому коду. Он довольно полный, и вы могли бы просто ограничить использование пространством имен Linq и вашими DAL, если хотите. Вы также могли бы добавить проверки, чтобы убедиться, что они (например) не выполняют более одной инструкции, а также расширенную визуализацию данных.

Комментарии:

1. 1 с помощью этого я мог бы хранить фрагменты кода на сервере SQL, загружать их во время выполнения.

2. Когда вы говорите о расширенной визуализации данных, я не думаю, что вы знаете, как я мог бы использовать отображение отладчика по умолчанию для объекта, не так ли? Будь то наведение курсора мыши на один из них или версия окна просмотра.

3. Нет, я не уверен, как это сделать. Я больше думал о том, чтобы предоставить PropertyEditor или привязку к базе данных TreeView к результату запроса.

Ответ №2:

Я предполагаю, что вы имеете в виду оценку в стиле javascript? К сожалению, в BCL, C # или VB нет функции в стиле eval, которая обеспечивала бы поведение, которое вы ищете.

Комментарии:

1. @Downvoter, потрудитесь объяснить? Иногда ответ на вопрос заключается в том, что «то, что вы хотите сделать, невозможно так, как вы хотите это сделать»

2. Согласен — очень плохой тон, особенно без объяснения причин.

Ответ №3:

Оформить заказ http://linqcompiler.codeplex.com /

Ответ №4:

Не напрямую, но вы можете создавать выражения с поздней привязкой и вызывать их. Разница в том, что вам нужно реализовать свой собственный конструктор выражений или DSL parser. Мне нужно было только поддерживать предложения WHERE, поэтому я реализовал объект-предикат с сериализацией XML, чтобы у меня был понятный человеку формат сохранения. Если вы хотите что-то более похожее на SQL, вы можете использовать библиотеку динамических запросов LINQ Скотта Гу, которая будет анализировать предикаты LINQ-syntax для типов ключевых выражений (Where, OrderBy, Select, некоторые другие). Если вам не нужен полный синтаксис LINQ (т. Е. вы можете отделить каждый предикат выражения), то вы можете использовать это напрямую. Если вам нужен полный синтаксис LINQ, вам придется добавить некоторый синтаксический анализ, но на самом деле это будет просто вопрос поиска пар ключевое слово-предикат и их динамического выполнения.

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx