调用此代码段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。
答案 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扩展方法属于这个命名空间。