文档菜单
文档首页
/
MongoDB C# 分析器
/

分析 LINQ 表达式

本页内容

  • 概述
  • 转换为 MongoDB 查询 API
  • 在 Visual Studio 中分析 LINQ
  • 简单的 LINQ 表达式
  • 不支持的 LINQ 表达式
  • 分析 LINQ3

LINQ 是 C# 语言中包含的查询语法。.NET/C# 驱动程序可以将 LINQ 表达式子集转换为 MongoDB 聚合管道。

要了解更多关于 LINQ 的信息,请参阅以下资源

  • LINQ 在 .NET/C# 驱动程序文档中

  • LINQ 在Microsoft C#指南中

要了解更多关于聚合管道的信息,请参阅MongoDB手册中的聚合

注意

运行时差异

尽管由C#分析器生成的MongoDB查询API翻译与您的运行时.NET/C#驱动程序查询具有相同的查询形状,但由于以下因素,可能会有细微的差异

  • 您的序列化设置

  • 您的LINQ设置

C#分析器生成的翻译与您的运行时查询之间的差异不应影响您分析和调试代码的能力。

要了解更多关于序列化和LINQ设置的信息,请参阅常见问题解答页面。

使用C#分析器了解有关您的LINQ表达式的以下内容

  • 您的LINQ表达式如何转换为MongoDB查询API

  • 您的LINQ表达式是否受支持

单击以下选项卡查看LINQ表达式及其对应的MongoDB查询API翻译的示例

var books = queryableCollection
.Where(b =>
b.Genre == genre &&
b.Price >= minPrice &&
b.Title.Contains(titleSearchTerm))
.OrderBy(b => b.Price)
.ToList();
[{ "$match" : {
"Genre" : genre,
"Price" : { "$gte" : minPrice },
"Title" : /titleSearchTerm/s }
},
{ "$sort" : { "Price" : 1 } }]

注意

变量名称

由C#分析器生成的MongoDB查询API翻译包含来自您的.NET/C#驱动代码的变量名。当您的应用程序与MongoDB通信时,.NET/C#驱动会将这些变量名替换为其对应的值。

要分析Visual Studio中的LINQ表达式,请执行以下操作

  1. 按照安装指南安装C#分析器。

  2. 使用.NET/C#驱动程序编写LINQ表达式。

  3. 将鼠标移至...注释下您的LINQ表达式的第一个方法,以显示包含MongoDB查询API翻译的信息消息。

C#分析器分析以下语法类型的LINQ表达式

  • 方法语法

  • 查询语法

点击以下相应的选项卡,查看带有或不带有信息消息的方法语法LINQ表达式

Screenshot of LINQ expression with an ellipsis annotation in Visual Studio.
Screenshot of LINQ expression with an information message displayed in Visual Studio.

点击以下相应的选项卡,查看带有或不带有信息消息的查询语法LINQ表达式

Screenshot of LINQ expression with an ellipsis annotation in Visual Studio.
Screenshot of LINQ expression with an information message displayed in Visual Studio.

如果你的LINQ表达式不受支持,C#分析器将输出一个NotSupportedLinqExpression警告。

点击以下选项卡,查看包含不受支持的LINQ表达式的代码片段和C#分析器显示的相应警告信息

以下代码片段包含不受支持的GetHashCode LINQ表达式

var result = queryableColl.Where(b => b.GetHashCode() == 167);

以下屏幕截图显示了Visual Studio中在上述代码片段下方由C#分析器显示的注释

Screenshot of annotation beneath unsupported LINQ expression

以下是由C#分析器生成的警告

Expression not supported: b.GetHashCode().

以下屏幕截图显示了Visual Studio中显示的警告

Screenshot of warning displayed in Visual Studio from unsupported LINQ.

提示

错误列表面板

如果你使用的是Windows上的Visual Studio,你可以在错误列表窗口中查看{+产品+-简称}的输出。

了解更多信息,请参阅错误列表窗口(来自微软)。

要查看更多不受支持的LINQ表达式的示例,请参阅MongoDB C# Analyzer GitHub仓库。

要分析LINQ3表达式,您必须配置C# Analyzer以使用LINQ3提供程序。要了解如何配置您的LINQ提供程序,请参阅配置指南。

重要

仅由LINQ3支持的表达式

如果您的.NET/C#驱动程序版本支持LINQ3,但您将C# Analyzer配置为使用默认的LINQ提供程序(LINQ2),则C# Analyzer会通知您您的LINQ表达式是否受LINQ3支持但不受LINQ2支持。

点击选项卡以查看受LINQ3支持但不受LINQ2支持的LINQ表达式以及相应的C# Analyzer警告输出。

var result = queryableColl.Where(b => b.Title.Substring(0) == "Pane");
Supported in LINQ3 only: db.coll.Aggregate([{ "$match" : { "$expr" : { "$eq" : [{ "$substrCP" : ["$Title", 0, { "$subtract" : [{ "$strLenCP" : "$Title" }, 0] }] }, "Pane"] } } }])

要查看仅由LINQ3提供程序支持的.NET/C#驱动程序的示例表达式,请参阅MongoDB C# Analyzer GitHub代码库。

返回

构建器表达式