On Tuesday, 12 November 2013 at 15:21:16 UTC, Ellery Newcomer wrote:
On 11/12/2013 06:38 AM, John Colvin wrote:
On Tuesday, 12 November 2013 at 13:50:49 UTC, Jacob Carlborg wrote:
auto person = Person.where(e => e.name == "John");

Translates to:

select * from person where name = 'John'


for those of us entirely unfamiliar with linq, what is this supposed to do? Select people with name "John" from a collection of people, like in
sql? It seems trivial to do this using filter, or am I missing
something...?

linq provides an interface to query any collection, but what is interesting in this case is

Person.where(e => e.name == "John")

invokes an engine that builds the necessary sql to issue an equivalent query to your sql database and assembles the results into a range of Person. And it can do this for any arbitrary predicate (well, almost. It doesn't handle function calls to arbitrary code too well).

the .NET framework can do this because it exposes an api for querying, building, and compiling asts.

D cannot do this because it doesn't. (and I have tried to make it work)

oh, I see. Would AST macros really be enough to make this work in D? "Arbitrary code" is a huge feature space in D, including much that doesn't map well to anything outside of a relatively low-level language, let alone SQL. I can see it quickly becoming a nightmare that would be worse than just issuing the predicate as an sql string or some generic equivalent.

Reply via email to