C# 是否可以使用dart将linq lambda表达式转换为SQL?

C# 是否可以使用dart将linq lambda表达式转换为SQL?,c#,sql,linq,lambda,dart,C#,Sql,Linq,Lambda,Dart,我知道可以在dart中创建类似linq的表达式,如下链接所示: 但是,我想知道是否有可能实现与C#和Java8相同的方法,即将lambda表达式转换为SQL,如以下链接所示: 我认为内置方法(where等)不可能做到这一点;我也不确定你是否可以不费吹灰之力(和一个转换器)自己构建它 在C#中,EF中使用的Where方法与您在IEnumerable上看到的Where方法不同,而是IQueryable上的扩展方法。方法签名不同: // IEnumerable<T> Where<T

我知道可以在dart中创建类似linq的表达式,如下链接所示:

但是,我想知道是否有可能实现与C#和Java8相同的方法,即将lambda表达式转换为SQL,如以下链接所示:


我认为内置方法(where等)不可能做到这一点;我也不确定你是否可以不费吹灰之力(和一个转换器)自己构建它

在C#中,EF中使用的
Where
方法与您在
IEnumerable
上看到的
Where
方法不同,而是
IQueryable
上的扩展方法。方法签名不同:

// IEnumerable<T>
Where<T>(this IEnumerable<T> source,            Func<T, Boolean>  predicate)
// IQueryable<T>
Where<T>(this  IQueryable<T> source, Expression<Func<T, Boolean>> predicate)
//IEnumerable
其中(此IEnumerable源,Func谓词)
//易变的
其中(此IQueryable源,表达式谓词)
使用
表达式
很重要;这意味着该方法可以获取有关传递的lambda的附加信息,并可以从其中的(支持的)运算符中遍历构建SQL的表达式

我不知道Dart中有任何东西允许对表达式进行类似的分解。镜像将允许您检查类型,但我认为它们不能检查任意的Dart表达式


然而,变形金刚可能会有所帮助。获取文档的AST并在其中查找对特殊“数据库类型”的
where()
的调用,然后重写它们应该不难。我怀疑这样做会涉及更多的问题

我认为可以创建一个转换器来处理代码并从中生成SQL。但我并不认为这是件容易的事。