Я пытаюсь создать библиотеку, в которой я могу указать параметры запроса и операторы в XML-файле, а во время выполнения я могу генерировать выражения linq на основе XML-файла. У меня это работает только на построение выражений "где", поэтому такие простые запросы, как select * from table, где table.id = 1. Вот пример простого запроса в файле xml:
<query name="latest">
<PropertyValue PropertyName="TimeStamp" OperatorName="GreaterThanOrEqual" ParamName="lastUpdated" />
</query>
Имя свойства TimeStamp - это имя свойства в классе C # для использования. ParamName - это параметр URL, поступающий из http-запроса в моем приложении asp.net.
В коде я могу построить выражение linq из этого и сделать следующее предложение where:
(IQueryable<DataObject>)dataObjects.Where(expression);
где выражение:
TimeStamp >= "2011-09-21T11:54:24"
Но у меня есть новый тип запроса, который мне нужно обрабатывать:
выберите * из таблицы t, где Id = (выберите топ 1 Id из таблицы
где Source = t. Порядок источников по Id desc)
Этот запрос выполняется к таблице с полем Id и полем Source. Запрос возвращает самую новую запись для каждого источника. Таким образом, он группируется по источнику и упорядочивает его в порядке убывания и возвращает первую запись для каждого источника. Затем внешний выбор возвращает все столбцы для каждого из результатов внутреннего выбора. Пример:
Таблица:
id source field3 field4
1 Device1 test test
2 Device2 test2 test2
3 Device1 test3 test3
4 Device2 test4 test4
Результаты запроса:
id source field3 field4
3 Device1 test3 test3
4 Device2 test4 test4
Так что теперь мне нужно динамически сгенерировать вложенный запрос в предложении where. Наверное, мой первый вопрос: можно ли преобразовать этот строковый запрос в запрос linq? Тогда мне нужно как-то динамически построить этот вложенный запрос .. Извините, если он не имеет большого смысла ...