【问题标题】:Can a method chain be called LINQ?方法链可以称为 LINQ 吗?
【发布时间】:2018-02-14 16:05:00
【问题描述】:

把这段代码叫做sn-p LINQ(Language Integrated Query)是否正确?

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,只是不是“查询语法”。
  • @Kobi 谢谢!
  • Linq 只是一组处理项目集合的方法,类似于 SQL 等基于查询的语言。您提供的查询语法和方法链实际上都是来自该命名空间的 linq 方法,它们仅在语法上有所不同,在行为上没有区别。
  • @HimBromBeere 感谢您的详细说明!

标签: c# linq


【解决方案1】:

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 扩展方法属于这个命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多