c# - 一个方法链能叫LINQ吗?

标签 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。

最佳答案

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.

注意第二段是这样开头的:

Query syntax and method syntax are semantically identical, but many people find query syntax simpler and easier to read.

顺便说一句,如果还不清楚的话,System.Linq 对于方法链接语法是强制性的也是因为 linq 扩展方法属于这个命名空间。

关于c# - 一个方法链能叫LINQ吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46070567/

相关文章:

c# - LINQ:为什么叫 "Comprehension Syntax"

c# - 从数据表中删除重复项

c# - 使用 LINQ 从列表中随机选择一个匹配的字符串

c# - 通过WCF打开IE

c# - 在列表或字典之间选择

c# - 在 Microsoft 测试管理器中执行时 Selenium 测试用例超时

c# - 这两个 LINQ 查询有什么区别?

c# - EF Core - 字符串或二进制数据将被截断

c# - 使用 ASP.NET (C#) 在 JS 数组中拆分和保存数据

c# - Mongodb C# 查找异步。使用linq过滤文档内的列表