Pergunta

Esta é a minha consulta:

Dim vendorId = 1, categoryId = 1
Dim styles = From style In My.Context.Styles.Include("Vendor") _
             Where style.Vendor.VendorId = vendorId _
             AndAlso (From si In style.StyleItems _
                      Where si.Item.Group.Category.CategoryId = _
                          categoryId).Count > 0 _
             Distinct

Eu tenho a sensação de que posso melhorar o desempenho, porque a consulta acima é (me corrija se eu estiver errado) executa 2 round-trips para o servidor; 1 vez pelo Conde e, em seguida, quando ele é executado.

Eu quero enviar esta coisa Count para o DB por isso deve ser apenas uma ida e volta para o servidor.

Mesmo não é exatamente a coisa, este é realmente o que eu preciso:

SELECT DISTINCT Style.* 
FROM Style INNER JOIN
    Vendor ON Style.VendorId = Vendor.VendorId INNER JOIN
    StyleItem ON Style.StyleId = StyleItem.StyleId INNER JOIN
    Item ON StyleItem.ItemId = Item.ItemId INNER JOIN
    [Group] ON Item.GroupId = [Group].GroupId INNER JOIN
    Category ON [Group].CategoryId = Category.CategoryId
WHERE (Style.VendorId = @vendorid) AND (Category.CategoryId = @CategoryId)

Eu gostaria de poder usar esta SPROC (ou seja função de importação etc.), mas eu preciso Include("Vendor"), que restrições me fazê-lo com Linq.

Qualquer tipo de sugestão será realmente welcommed!

Foi útil?

Solução

É provavelmente não fazer duas viagens para o banco de dados. Ele vai ficar otimizado antes de ser executado, e nada é executado até que você tente a ler os dados.

Normalmente eu verificar o SQL que é criado usando SQL Profiler. Descobri também LinqPad ser muito útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top