我怎么能写一个ORM将LINQ转换成SQL?
我已经做了一个现有的ORM,但我想用LINQ改进它,这样我,例如,就能说:
MyORMObject.GetAll(o => o.firstName == "peter");
我脑子里的想法是,系统会把它转换成一个查询。我想困难的部分是读取解析到LINQ部分的内容。
我该怎么做?换句话说,我将如何(通过反射或其他方式)读取正在使用的FirstName
属性及其期望的匹配项"Peter"?
你将需要实现一个IQueryable LINQ Provider。顺便说一下,你不会使用反射,你将使用表达式树。
如果您的方法是IEnumerable<T> GetAll<T>(Expression<Func<T,bool>>)
,那么lambda表达式将被编译为一个表达式树,具有Equals
子表达式,该子表达式依次具有包含FirstName
属性的MemberExpression
和包含字符串的ConstantExpression
。