LINQ方法链可以被称为LINQ吗?

时间:2017-09-06 08:41:52

标签: c# linq

调用此代码段LINQ(语言集成查询)是否正确?

var lstMyStrings = new List<string>();
lstMyStrings.Where(aX => string.IsNullOrEmpty(aX))
            .Skip(3)
            .ToList();

我很困惑,因为此代码 System.Linq是强制性的 但是,当我看到问题并回答如下:.NET LINQ query syntax vs method chain 时,他们会明确谈论方法链而不是LINQ。

1 个答案:

答案 0 :(得分:14)

LINQ可以用两种不同的方式编写 一种是使用LINQ声明性查询语法编写查询:

var query = from x in source
            where condition
            select x.Property

另一种是使用LINQ的扩展方法:

var query = source.Where(condition).Select(x => x.Property);

两个查询都是相同的并且会产生相同的结果(在这个过度简化的示例中,编译器错误,但它的重要思想是: - )

c#编译器将查询转换为方法调用 这意味着您作为查询编写的所有内容也可以使用方法链编写。但请注意,相反的是错误的 - 有些查询只能使用Linq的扩展方法编写。

进一步阅读,here's what Microsoft have to say about it.

注意第二段以此开头:

  

查询语法和方法语法在语义上是相同的,但许多人发现查询语法更简单,更易于阅读。

顺便说一句,如果它已经清楚了,那么System.Linq对于方法链语法必不可少的原因也是因为linq扩展方法属于这个命名空间。