Delayed execution
I know the deferred execution concept should be beaten into me by now, but this example really helped me get a practical grasp of it:
static void Linq_Deferred_Execution_Demo()
{
List<String> items = new List<string> { "Bob", "Alice", "Trent" };
var results = from s in items select s;
Console.WriteLine("Before add:");
foreach (var result in results)
{
Console.WriteLine(result);
}
items.Add("Mallory");
//
// Enumerating the results again will return the new item, even
// though we did not re-assign the Linq expression to it!
//
Console.WriteLine("\nAfter add:");
foreach (var result in results)
{
Console.WriteLine(result);
}
}
The above code returns the following:
Before add:
Bob
Alice
Trent
After add:
Bob
Alice
Trent
Mallory
That there is more than just LINQ
to SQL
and the features are more than just a SQL
parser embedded in the language.
Big O notation. LINQ makes it incredibly easy to write O(n^4) algorithms without realizing it, if you don't know what you're doing.
I think the fact that a Lambda
expression can resolve to both an expression tree and an anonymous delegate, so you can pass the same declarative lambda
expression to both IEnumerable<T>
extension methods and IQueryable<T>
extension methods.
Took me way too long to realize that many LINQ extension methods such as Single()
, SingleOrDefault()
etc have overloads that take lambdas.
You can do :
Single(x => x.id == id)
and don't need to say this - which some bad tutorial got me in the habit of doing
Where(x => x.id == id).Single()
In LINQ to SQL I constantly see people not understanding the DataContext, how it can be used and how it should be used. Too many people don't see the DataContext for what it is, a Unit of Work object, not a persistant object.
I've seen plenty of times where people are trying to singleton a DataContext/ session it/ etc rather than making a new time for each operation.
And then there's disposing of the DataContext before the IQueryable has been evaluated but that's more of a prople with people not understanding IQueryable than the DataContext.
The other concept I see a lot of confusion with is Query Syntax vs Expression Syntax. I will use which ever is the easiest at that point, often sticking with Expression Syntax. A lot of people still don't realise that they will produce the same thing in the end, Query is compiled into Expression after all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With