Precisa de ajuda com a criação de uma consulta no ELinq
-
08-07-2019 - |
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!
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.