LINQ 查询语法直接转换为扩展方法语法。然而,反过来是不正确的。扩展方法比 LINQ 查询语法关键字支持的方法多得多。
因此,使用方法语法,您可以执行与使用 LINQ 查询语法完全相同或更多的操作。通常 LINQ 查询语法更易于阅读。
// LINQ query syntax
var query =
from num in numbers
where num % 2 == 0
orderby num
select num;
// Corresponding method syntax
var query = numbers
.Where(num => num % 2 == 0)
.OrderBy(num => num)
.Select(num => num);
一个简单的示例,说明您可以使用方法语法而不是查询语法(因为它没有关键字):
var query = numbers
.First();
如果需要,您可以将两者结合起来:
var query =
(from num in numbers
where num % 2 == 0
orderby num
select num)
.First();
除了First
,还有大量的 LINQ 扩展方法(Sum
, Average
, Max
...)在 LINQ 查询语法中没有关键字。
顺便说一句,由于 LINQ 查询语法映射到扩展方法,因此您不限于使用 LINQ 扩展方法。如果您在自己的自定义对象上定义都接受委托的 aSelect
和Where
方法,那么您可以在自己的对象上使用 LINQ 查询语法!多么酷啊?例如,一个无意义的例子:
public class MyClass
{
public MyClass Where(Func<string, bool> function)
{
return this;
}
public List<string> Select(Func<string, string> function)
{
return new List<string>();
}
}
MyClass myClass = new MyClass();
var x = from m in myClass
where !String.IsNullOrEmpty(m)
select m;