Subquery, Progressive query, Into, Wrapping query
1. Using fluent syntax
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
IEnumerable<string> outerQuery = names
.Where (n => n.Length == names.OrderBy (n2 => n2.Length)
.Select (n2 => n2.Length).First());
2. Using query expression
IEnumerable<string> outerQuery =
from n in names
where n.Length == (from n2 in names orderby n2.Length select n2.Length).First()
select n;
3. Using Min aggregation function
IEnumerable<string> outerQuery =
from n in names
where n.Length == names.Min (n2 => n2.Length)
select n;
4. Using Progressive query
int shortest = names.Min (n => n.Length);
IEnumerable<string> query = from n in names
where n.Length == shortest
select n;
后三种情况用于需要对原始数据进行转换
5.Into clause
IEnumerable<string> query =
from n in names
select n.Replace ("a", "").Replace ("e", "").Replace ("i", "")
.Replace ("o", "").Replace ("u", "")
into noVowel
where noVowel.Length > 2 orderby noVowel select noVowel;
6. Wrapping query
IEnumerable<string> query =
from n1 in
(
from n2 in names
select n2.Replace ("a", "").Replace ("e", "").Replace ("i", "")
.Replace ("o", "").Replace ("u", "")
)
where n1.Length > 2 orderby n1 select n1;