Книга: C# 2008 Programmer
Query Syntax versus Method Syntax and Lambda Expressions
Query Syntax versus Method Syntax and Lambda Expressions
The two LINQ queries in the previous section use the query syntax, which is written in a declarative manner, like this:
var oddNums = from n in nums
where (n % 2 == 1) orderby n descending
select n;
In addition to using the query syntax, you can also use the method syntax, which is written using method calls like Where
and Select
, like this:
int[] nums = {
12, 34, 10, 3, 45, 6, 90, 22, 87, 49, 13, 32
};
IEnumerable<int> oddNums =
nums.Where(n => n % 2 == 1).OrderByDescending(n => n);
To find the total number of odd numbers in the array, you can also use the method syntax to query the array directly, like this:
int count =
(nums.Where(n => n % 2 == 1).OrderBy(n => n)).Count();
Let's take a look at method syntax and how it works. First, the expression:
(n => n % 2 == 1)
is known as the lambda expression. The =>
is the lambda operator. You read it as "goes to," so this expression reads as "n goes to n modulus 2 equals to 1." Think of this lambda expression as a function that accepts a single input parameter, contains a single statement, and returns a value, like this:
static bool function(int n) {
return (n % 2 == 1);
}
The compiler automatically infers the type of n (which is int
in this case because nums
is an int
array) in the lambda expression. However, you can also explicitly specify the type of n, like this:
IEnumerable<int> oddNums =
nums.Where((int n) => n % 2 == 1).OrderByDescending(n => n);
The earlier example of the string array can also be rewritten using the method syntax as follows:
string[] allNames = new string[] {
"Jeffrey", "Kirby", "Gabriel",
"Philip", "Ross", "Adam",
"Alston", "Warren", "Garfield"
};
var foundNames =
allNames.Where(name = name.StartsWith("G") &&
name.EndsWith("l"));
Which syntax should you use? Here's some information regarding the two syntaxes:
? There is no performance difference between the method syntax and the query syntax.
? The query syntax is much more readable, so use it whenever possible.
? Use the method syntax for cases where there is no query syntax equivalent. For example, the Count
and Max
methods have no query equivalent syntax.
- Regular Expressions
- Разработка приложений баз данных InterBase на Borland Delphi
- Open Source Insight and Discussion
- 19.1.1. Функция jQuery()
- Introduction to Microprocessors and Microcontrollers
- Chapter 6. Traversing of tables and chains
- Chapter 8. Saving and restoring large rule-sets
- Chapter 11. Iptables targets and jumps
- Chapter 5 Installing and Configuring VirtualCenter 2.0
- Chapter 16. Commercial products based on Linux, iptables and netfilter
- Appendix A. Detailed explanations of special commands
- Appendix B. Common problems and questions