我知道可以在dart中创建linq like表达式,如下所示:
https://github.com/dartist/101LinqSamples
但是,我想知道是否有可能实现与C#和Java8相同的方法,即。将lambda表达式转换为SQL,如下所示:
答案 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问题!