On Tue, 12 Nov 2013 14:38:43 -0000, John Colvin <john.loughran.col...@gmail.com> 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 is often confused with LinqToSQL, the above was a description of what happens in the latter. If Person was an object representing a table from a SQL database, then calling 'where' on it would translate into an IQueryable<Person> object which when iterated upon using foreach would execute the SQL statement shown above and return the resulting rows as <someperson> objects one by one to the foreach body.

Pure Linq is a DSL, an alternate syntax, which looks a lot like SQL, which can translate to SQL but is not limited to SQL. It could translate to any alternate database syntax, or simply access a container supporting the required operations.

The motivation is the same as for "foreach", it is a general syntax for accessing a wide range of containers including databases with a common syntax. We could, equally, go the other way, use the IMO nicer composition syntax X.where(..).foo(...).etc and translate that to SQL, without the need to the SQL like DSL inside D.

For some LINQ examples, see:
http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

For a specific where example using a simple container, see "Where - simple 1"

R

--
Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to