分析 LINQ 表达式
Overview
LINQ是C#语言中包含的一种查询语法。 .NET/ C#驾驶员可以将 LINQ 表达式的子集转换为MongoDB聚合管道。
要了解有关 LINQ 的更多信息,请参阅以下资源:
要了解有关聚合管道的更多信息,请参阅 MongoDB 手册中的聚合。
注意
运行时差异
使用 C# 分析器了解有关 LINQ 表达式的以下信息:
LINQ 表达式如何转换为MongoDB查询API
如果您的任何 LINQ 表达式不受支持
转换为 MongoDB 查询 API
单击以下标签页可查看 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
要在 Visual Studio 中分析LINQ 表达式,请执行以下操作:
按照安装指南中的说明安装 C# 分析器。
使用 .NET/C# 驱动程序编写 LINQ 表达式。
将鼠标移到 LINQ 表达式的第一个方法下方的 ...注解上,以显示一条包含 MongoDB Query API 转换的信息消息。
简单 LINQ 表达式
C# 分析器分析以下语法类型的 LINQ 表达式:
方法语法
查询语法
单击以下相应标签页可查看以方法语法编写的 LINQ 表达式,显示或不显示信息消息:
单击以下相应标签页可查看以查询语法编写的 LINQ 表达式,显示或不显示信息消息:
不支持的 LINQ 表达式
如果您的 LINQ 表达式不受支持,C# 分析器会输出 NotSupportedLinqExpression
警告。
单击以下标签页可查看包含不受支持的 LINQ 表达式的代码片段以及 C# 分析器显示的相应警告消息:
以下代码片段包含不受支持的GetHashCode
LINQ表达式:
var result = queryableColl.Where(b => b.GetHashCode() == 167);
以下屏幕截图显示了 Visual Studio 中 C# 分析器在上述代码片段下方显示的注解:
以下是C# Analyzer生成的警告:
Expression not supported: b.GetHashCode().
以下屏幕截图显示了 Visual Studio 中显示的警告:
提示
错误列表面板
如果使用的是 Visual Studio for Windows,则可以在“错误列表”窗口中查看 {+product+-short} 的输出。
要了解详情,请参阅来自 Microsoft 的错误列表窗口。
要查看不支持的 LINQ 表达式的更多示例,请参阅 MongoDB C# Analyzer Github 存储库。
Analyze LINQ3
若要分析 LINQ 3表达式,必须将 C# 分析器配置为使用 LINQ 3提供程序。 若要了解如何配置 LINQ 提供程序,请参阅配置指南。
重要
仅 LINQ 3支持的表达式
如果您的 .NET/C# 驱动程序版本支持 LINQ 3 ,但您将 C# 分析器配置为使用默认 LINQ 提供程序 (LINQ 2 ),则 C# 分析器会通知您 LINQ 3是否支持您的 LINQ 表达式,但不支持LINQ 2 。
单击标签页可查看 LINQ 3支持但 LINQ 2不支持的 LINQ 表达式,以及 C# 分析器输出的相应警告:
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"] } } }])
要查看.NET/ C#驾驶员仅支持 LINQ3 提供商程序的表达式示例,请参阅 MongoDB C# Analyzer Github存储库。