Menu Docs

Analisar expressões LINQ

LINQ é uma sintaxe de query incluída na linguagem C#. O driver .NET /C# pode converter um subconjunto de expressões LINQ em pipelines de agregação do MongoDB .

Para saber mais sobre LINQ, consulte os seguintes recursos:

  • LINQ na documentação do driver .NET/C#

  • LINQ no guia Microsoft C#

Para saber mais sobre pipelines de agregação, consulte Agregação no manual MongoDB.

Observação

Diferenças de tempo de execução

Embora as traduções da API de query do MongoDB geradas pelo C# Analyzer tenham a mesma forma de query que suas queries de driver .NET/C# do tempo de execução, pode haver pequenas diferenças devido aos seguintes fatores:

  • Suas configurações de serialização

  • Suas configurações do LINQ

A diferença entre as traduções que o C# Analyzer gera e suas queries no tempo de execução não deve afetar sua capacidade de analisar e depurar seu código.

Para saber mais sobre serialização e configurações do LINQ, consulte a página de dúvidas frequentes .

Use o C# Analyzer para saber o seguinte sobre suas expressões LINQ:

  • Como suas expressões LINQ se traduzem na MongoDB Query API

  • Se alguma das suas expressões LINQ não for suportada

Clique nas abas abaixo para ver um exemplo de uma expressão LINQ e sua tradução correspondente da API MongoDB Query:

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 } }]

Observação

Nomes de variáveis

As traduções da API de query do MongoDB geradas pelo C# Analyzer contêm nomes de variáveis do seu código de driver .NET/C#. O driver .NET/C# substitui os nomes dessas variáveis pelos valores correspondentes quando seu aplicativo se comunica com o MongoDB.

Para analisar suas expressões LINQ no Visual Studio, execute as seguintes ações:

  1. Instale o C# Analyzer conforme descrito no guia de instalação .

  2. Escreva uma expressão LINQ com o driver .NET/C#.

  3. Passe o mouse sobre a anotação ... abaixo do primeiro método da sua expressão LINQ para exibir uma mensagem informativa que contém a tradução da API de query do MongoDB.

O C# Analyzer analisa expressões LINQ nos seguintes tipos de sintaxe:

  • Sintaxe do método

  • Sintaxe de consulta

Clique na seguinte guia correspondente para ver uma expressão LINQ escrita na sintaxe do método com ou sem uma mensagem informativa exibida:

Clique na seguinte guia correspondente para ver uma expressão LINQ escrita na sintaxe de query com ou sem uma mensagem de informações exibida:

Se sua expressão LINQ não for suportada, o C# Analyzer gerará um aviso MALinq2001 .

O seguinte trecho de código contém a expressão LINQ GetHashCode não suportada:

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

O MongoDB Analyzer mostra uma anotação na expressão não suportada e gera a seguinte mensagem de aviso:

Expression not supported: b.GetHashCode().

A seguinte captura de tela mostra o código anotado e o aviso exibido quando você passa o mouse sobre a anotação:

Dica

Painel de lista de erros

Se você estiver usando o Visual Studio para Windows, poderá exibir a saída do MongoDB Analyzer na janela Lista de erros.

Para saber mais, consulte a Janela de lista de erros da Microsoft.

Para visualizar mais exemplos de expressões LINQ sem suporte, consulte o repositório do MongoDB C# Analyzer no Github.

Para analisar uma expressão LINQ3 , você deve configurar o C# Analyzer para usar o fornecedor LINQ3 . Para saber como configurar seu provedor LINQ, consulte o guia de configuração .

Importante

Expressões suportadas somente por LINQ3

Se a versão do driver .NET/C# oferecer suporte a LINQ3 , mas você configurar o C# Analyzer para usar o provedor LINQ padrão (LINQ2), o C# Analyzer informará se sua expressão LINQ é compatível com LINQ3 , mas não LINQ2.

Clique nas guias para ver uma expressão LINQ suportada por LINQ3 , mas não por LINQ2 , e a saída de aviso correspondente pelo 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"] } } }])

Para visualizar exemplos de expressões que .NETC# o driver / suporta somente com o3 provedor LINQ, consulte o repositório MongoDB C# Analyzer Github do .