[ 
https://issues.apache.org/jira/browse/GROOVY-8258?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17208403#comment-17208403
 ] 

mgroovy commented on GROOVY-8258:
---------------------------------

@[~daniel_sun]: Hi Daniel
 * First congrats since it seems like you found the time to get this 
dear-to-your-heart project started :)
 * Second I would like to say that in C# I personally typically preferred to 
use the stream API underlying LINQ directly over using the LINQ syntax. To me 
using a call chain always seemed much clearer & cleaner than using a SQL-like 
language that is mapped to said call chain. The sole exception to this was 
group-by expressions, which I felt were complex enough to give a clear 
advantage when using the DSL syntax.
 * So, if I have not completely misunderstood what you are saying, my question 
would be why you feel it is necessary for the "backend" stream API to be purely 
an implementation detail, and if you plan for it to stay that way indefinitely 
or only during an initial implementation phase ?
 * Last I was wondering how much static compilation / type safety, and as a 
result out-of-the-box IDE Intellisense support the planned LINQ DSL (GINQ) will 
have ?-)

> [GEP] Create a LINQ-like DSL
> ----------------------------
>
>                 Key: GROOVY-8258
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8258
>             Project: Groovy
>          Issue Type: New Feature
>            Reporter: Daniel Sun
>            Assignee: Daniel Sun
>            Priority: Major
>             Fix For: 4.x
>
>
> h2. *Ⅰ. Introduction*
> GINQ DSL is an alternative solution of GINQ, it is a simplified version of 
> GINQ(GROOVY-9159) and will be implemented as a module "groovy-linq".
> GINQ DSL is wrapped with:
> {code:java}
> GINQ {
>    // GINQ code
> }
> {code}
> h2. *Ⅱ. Sample code related to GROOVY-9159*
> h3. 1. Filtering
> h4. 1.1
> {code:java}
> from p in persons
> where p.age > 15 && p.age <= 35
> select p.name
> {code}
> h4. 1.2
> {code:java}
> from p in persons
> where p.age > 15 && p.age <= 35
> select p
> {code}
> h4. 1.3
> {code:java}
> from t in numbers 
> where t <= 2
> select t
> {code}
> h3. 2. Joining
> h4. 2.1
> {code:java}
> from p in persons
> innerjoin c in cities
> on p.city.name == c.name
> select p.name, c.name
> {code}
> h4. 2.2
> {code:java}
> from p in persons
> from c in cities
> where p.city.name == c.name
> select p.name, c.name
> {code}
> h4. 2.3
> {code:java}
> from p in persons
> from c in cities
> where p.city == c
> select p.name
> {code}
> h4. 2.4
> {code:java}
> from p in persons
> leftjoin c in cities
> on p.city.name == c.name //  same with left outer join
> select p.name, c.name
> {code}
> h4. 2.5
> {code:java}
> from p in persons
> rightjoin c in cities
> on p.city.name == c.name //  same with right outer join
> select p.name, c.name
> {code}
> h3. 3. Projection
> h4. 3.1
> {code:java}
> from p in persons
> select p.name
> {code}
> h4. 3.2
> {code:java}
> from p in persons
> select p.name, p.age
> {code}
> h4. 3.3
> {code:java}
> from p in persons
> select [name: p.name, age: p.age]
> {code}
> h4. 3.4
> {code:java}
> from p in persons
> select new Person(name: p.name, age: p.age)
> {code}
> h4. 3.5
> {code:java}
> from p in persons
> select p
> {code}
> h3. 4. Grouping
> h4. 4.1
> {code:java}
> from p in persons
> groupby p.gender
> select p.gender, max(p.age)
> {code}
> h3. 5. Having
> h4. 5.1
> {code:java}
> from p in persons
> groupby p.gender
> having p.gender == 'Male'
> select p.gender, max(p.age)
> {code}
> h3. 6. Sorting
> h4. 6.1
> {code:java}
> from p in persons
> orderby p.age
> select p.name
> {code}
> h4. 6.2
> {code:java}
> from p in persons
> orderby p.age desc
> select p.name
> {code}
> h4. 6.3
> {code:java}
> from p in persons
> orderby p.age desc
> thenby p.name asc // asc is optional
> select p.name
> {code}
> h3. 7. Pagination
> h4. 7.1
> {code:java}
> from n in numbers
> limit 2, 5
> select n
> {code}
> h4. 7.2
> {code:java}
> from n in numbers
> limit 5
> select n
> {code}
> h3. 8. Nested Queries
> h4. 8.1
> {code:java}
> from v in (
>     from n in numbers
>     where n <= 5
>     select n
> )
> limit 2, 5
> select v
> {code}
> h3. 9. WITH-Clause
> h4. 9.1
> {code:java}
> with v as (
>     from n in numbers
>     where n <= 5
>     select n
> )
> from v
> limit 2, 5
> select v
> {code}
> h3. 10. Union
> h4. 10.1
> {code:java}
> from n in numbers1
> select n
> unionall
> from n in numbers2
> select n
> {code}
> h4. 10.2
> {code:java}
> from n in numbers1
> select n
> union
> from n in numbers2
> select n
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to