Typed Query Builder

Feb 25, 2010 at 12:40 PM

Здарова. Я смотрю у тебя в списке значится Typed Query Builder и ссылки на релевантные работы по построению LINQ запросов в рантайме. У меня похожая задача, а именно построение запросов на основе метаданных. Т.е. хочется реализовать код, который, например, берёт имя поля сущности, несколько предикатов и строит фильтр, применяя предикаты к соответствующему полю в виде Expression-ов (чтобы можно было скормить в Where()). Проблема в том, что некоторые штуки передаются именно как метаданные (т.е. передается имена полей и т.п.), т.е. запрос надо как-бы собирать ручками из Expression-ов, при этом еще приплести рефлексию. Это *очень* не удобно, по крайней мере часть запроса хочется записать на нормальном сишарпе и заюзать встроенный движок цитирования, тот что автоматически строит выражения в функциях с сигнатурой вида Foo<T>(Expression<Func<T, bool>> pred) (для предикатов, например). Т.е. придумать, как использовать смешанный подход, чтобы часть запроса можно было представить деревом выражений, а часть - кодом на сишарпе. Я думаю использовать встроенные возможности LINQ. Т.к. LINQ поддерживает монады, фактически, можно попробовать использовать Expression в качестве зависимого типа, а их значения в качестве основного и писать что-то вроде:

var expr = from a in MyExpressionBuilder.FieldOrProperty<City>("CityName")
select  a.StartsWith("Моск")

результатом чего будет, мм. лямбда-выражение наверное (я еще не придумал как лучше), которое можно уже скормить в Where() Queryable. Мне это нужно как обычно вчера, т.е. я либо это сделаю в темпе вальса, либо забью и соберу выражения руками. Я не знаю, соотносится ли это как-то с твоей работой (т.к. разбираться в проекте совсем нет времени, уж извини, если что), но если соотносится, мы могли бы скооперироваться. Т.е. если у тебя уже реализован подобный движок, напиши мне, если нет, но ты в нём заинтересован - дай знать, я скину прототип как закончу. Сам то я сильно дальше прототипа не пойду, т.к. мне это нужно для решения одной прикладной задачи, по которой сроки жмут, и как только я получу минимум нужного мне функционала, я прекращу дальнейшее развитие. И да, если у тебя уже готов Typed Query Builder скинь его точные координаты, пожалуйста, мне бы хотелось взглянуть на код.