Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LINQ: Dot Notation vs Query Expression

I am beginning to use LINQ in general (so far toXML and toSQL). I've seen that sometimes there are two or more ways to achieve the same results. Take this simple example, as far as I understand both return exactly the same thing:

SomeDataContext dc = new SomeDataContext();  var queue = from q in dc.SomeTable         where q.SomeDate <= DateTime.Now && q.Locked != true         orderby (q.Priority, q.TimeCreated)         select q;  var queue2 = dc.SomeTable         .Where( q => q.SomeDate <= DateTime.Now && q.Locked != true )         .OrderBy(q => q.Priority)         .ThenBy(q => q.TimeCreated); 

The idea is that there are two ways to express the same thing; I understand that the first method has some limitations and that the "dot notation" is more complete, but besides that, are there any other advantages?

like image 290
Martin Marconcini Avatar asked Mar 10 '09 13:03

Martin Marconcini


People also ask

What is query expression in LINQ?

A query expression is a first-class language construct. It is just like any other expression and can be used in any context in which a C# expression is valid. A query expression consists of a set of clauses written in a declarative syntax similar to SQL or XQuery.

What are the two forms of LINQ?

LINQ comes in two syntactical flavors: The Query and the Method syntax. They can do almost the same, but while the query syntax is almost a new language within C#, the method syntax looks just like regular C# method calls.

Can you use Lambda expression instead of LINQ query?

So performance-wise, there's no difference whatsoever between the two. Which one you should use is mostly personal preference, many people prefer lambda expressions because they're shorter and more concise, but personally I prefer the query syntax having worked extensively with SQL.

What is the difference between Lambda expression and LINQ?

Language Integrated Query (LINQ) is feature of Visual Studio that gives you the capabilities yo query on the language syntax of C#, so you will get SQL kind of queries. And Lambda expression is an anonymous function and is more of a like delegate type.


2 Answers

The "dot" notation is usually called Lambda syntax. The first notation goes by a number of names but I usually call it the query syntax.

I work on a team of 10 developers and we argue at length about which we should use as a standard. In general, the more seasoned (with LINQ) developers migrate towards the Lambda syntax but there are significant exceptions.

Lambda is more concise but performing multiple table joins is a nightmare. Joins are just much cleaner with the query syntax. The flip side is that there are a number of LINQ operations that only exist within the Lambda syntax: Single(), First(), Count() etc.

So, use what you feel most comfortable with and realize that as you gain experience, your preference will likely change. There is great value in being able to read both and there will certainly be situations where you have to use a little bit of both. Other situations will lend themselve to one style over the other. In the end, it all gets translated into the same executable code.

like image 87
andleer Avatar answered Sep 27 '22 20:09

andleer


I use whichever syntax is more readable for my query, on a case-by-case basis.

Where possible, I try to avoid mixing and matching the two, although sometimes it's okay (if it's a single call to First() at the end of a query, for example). Deferred execution means it's just as efficient to use a query expression and assign the result to a variable, and then use dot notation using that variable:

var query = from x in y             orderby z             group x by x.Name into groups             // etc             select foo;  var page = query.Skip(50).Take(10); 

As others have said, query expressions are just translated into "normal" C# 3 without query expressions, so there's no penalty for doing this.

like image 42
Jon Skeet Avatar answered Sep 27 '22 21:09

Jon Skeet