可以使用dart将linq lambda表达式转换为SQL吗?

时间:2014-04-04 01:58:46

标签: c# sql linq lambda dart

我知道可以在dart中创建linq like表达式,如下所示:

https://github.com/dartist/101LinqSamples

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

https://code.google.com/p/lambda-sql-builder/

1 个答案:

答案 0 :(得分:1)

我不相信这对于内置方法(在哪里等)是可能的;而且我不确定你是否可以在不费力(和变压器)的情况下自己构建它。

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

// 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)

使用Expression很重要;这意味着该方法获取有关传递的lambda的附加信息,并且可以向下遍历从其中的(支持的)运算符构建SQL的表达式。

我不知道Dart中允许类似表达式分解的任何内容。镜像会让你检查类型,但我认为它们不能检查任意的Dart表达式。

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