Конвертировать лямбда-выражения в SQL в ORM?

#c# #sql #linq #reflection #orm

#c# #sql #linq #отражение #orm

Вопрос:

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

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

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

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

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

Ответ №1:

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

Ответ №2:

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