Following my anal retentive attention to the tightness of LINQ code and SQL it generates, I decided to refactor an old piece of code that extracted identifiers of the accounts matching certain criteria. Being very smug with all the newly acquired knowledge, I quickly produced an equivalent of:
var activeAccounts = crm.AccountSet
.Where(a => a.Name.StartsWith("Bar"))
.Select (a => a.Id);
foreach (var id in activeAccounts)
{
Console.WriteLine("{0}", id);
}
To my horror, this code generated an equivalent of “select *” SQL statement (ok, it listed the columns explicitly but it listed all columns), neutralizing all my efforts. Explicit column name, on the other hand, generated mean and lean SQL:
var activeAccounts = crm.AccountSet
.Where(a => a.Name.StartsWith("Bar"))
.Select (a => a.AccountId);
object.Id is a very handy abstraction, but when it comes to LINQ, it’s a leaky one.
of the