Конвертировать лямбда-выражения в SQL в ORM? - PullRequest
3 голосов
/ 21 апреля 2011

Как я могу написать ORM, который бы преобразовывал LINQ в SQL?

Я уже создал существующий ORM, но я хочу улучшить его с помощью LINQ, чтобы я, например, мог сказать:

MyORMObject.GetAll(o => o.firstName == "peter");

Идея в моей голове состоит в том, что система тогда возьмет это и преобразует в запрос.Полагаю, самая сложная часть - прочитать материал, разобранный в части LINQ.

Как мне это сделать?Другими словами, как бы мне (через Reflection или что-то еще) прочитать используемое свойство FirstName и его желаемое совпадение, "Peter"?

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

Вам понадобится реализовать поставщика IQueryable LINQ .Кстати, вы не будете использовать отражение, вы будете использовать выражение деревья.

3 голосов
/ 21 апреля 2011

Если ваш метод IEnumerable<T> GetAll<T>(Expression<Func<T,bool>>), то лямбда-выражение будет скомпилировано как дерево выражений с подвыражением Equals, которое, в свою очередь, имеет MemberExpression, содержащее свойство FirstName, и ConstantExpression содержащий строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...