#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
содержащее строку.