3 Things To Know Before Using jLinq
Since I released the beta code for the new jLinq I've had several of the same questions show up. Here are some answers to help you get started.
Use Query Commands - Not 'Where'
I've had a few questions where people start trying to use the where
command and find that it isn't solving anything.
As far as I can tell, a lot of other LINQ style Javascript libraries use Where
as their query command and have the developer manually provide the comparisons. Granted, I don't know the other frameworks very well (hint, I wrote my own) but a lot of the code samples look something like this.
var results = lib.From(data) .Where(function(record) { return record.name.substr(0, 1) == "a"; }) .OrderBy(function(record) { return record.name; }) .Select();
I'm sure that these libraries are doing a lot of stuff for you in the background, but the where
command in itself seems like placing too much work on the developer.
jLinq approaches this differently. Instead, you'll find many common query methods included as part of the library. These methods also evaluate the data types to determine the best way to query the property.
Here is an example, consider you have some data that looks like this.
var data = [{ name: "James", permissions: ["read", "write", "delete"] }, /* snip... */];
Instead of checking these records manually, you can use the same command for both properties and they will handle the data differently for each.
//with string types jlinq.from(data).contains("name", "e").select(); //matches the 4th 'e' in 'James' //with array types jlinq.from(data).contains("permissions", "write").select(); //matches the 2nd 'write'
This reduces the typing you do since you no longer have to perform manual comparisons.
Of course, jLinq does include a where
command that uses the same syntax as the example above (anonymous function), but it is recommended to create extension methods instead of using the where
command.
Operators Are Query Commands Too
Operators are an important part of jLinq. Sometimes you'd like to match on more than one condition or ignore records that do not meet a certain condition. You can use operators as individual commands in your queries.
//Examples only - Shorter syntax explained in Section 3 jlinq.from(data) .starts("first", "a") .or() .starts("first", "b"); jlinq.from(data) .not() .starts("first", "d")
jLinq takes operators a step further by creating operator aliases for all of the query commands in your library. This means that instead of only having the query command starts
you actually have 6 - starts
, orStarts
, andStarts
, notStarts
, orNotStarts
, andNotStarts
. The queries above can be rewritten as.
//Examples only - Shorter syntax explained in Section 3 jlinq.from(data) .starts("first", "a") .orStarts("first", "b") .select() jlinq.from(data) .notStarts("first", "d");
It is worth noting that and
is the implied default unless you provide an or
- the and
versions of the query commands are for aethestetics only. @html.smile()
DRY -- I Repeat, DRY!
If you aren't familiar with the term DRY, it means "Don't Repeat Yourself". The previous samples reduced some of our typing, but jLinq can actually take it a step further.
jLinq uses field and command memorizing, meaning after you say it once it is implied until you say something different.
jlinq.from(data) .starts("first", "a") .or("b") .or("c"); jlinq.from(data) .starts("first", "a") .ends("b") .or("last", "a");
The first example memorizes the command being used is starts
and the field being queried is first
. After that, the remaining calls to 'or' will repeat the previous command and field unless something else is used.
The second example shows how you can mix up commands and field names without needing to repeat yourself. Basically, here is what the query is doing.
- Records with first names starting with 'a'...
- then records with first names ending with 'b'...
- then records with last names ending with 'a'
You can see that jLinq makes it easy to avoid repeating the same commands and field names to reduce the typing.
This is just some of the first basics to understand about jLinq. I'll be blogging more (and writing documentation) for the next few days. Feel free to contact me with questions.
August 11, 2010
3 Things To Know Before Using jLinq
Post titled "3 Things To Know Before Using jLinq"