分析 LINQ 表达式
概述
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查询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#分析器生成的警告
Expression not supported: b.GetHashCode().
以下屏幕截图显示了Visual Studio中显示的警告

要查看更多不受支持的LINQ表达式的示例,请参阅MongoDB C# Analyzer GitHub仓库。
分析LINQ3
要分析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代码库。