Нужна помощь в разработке запроса в ELinq - PullRequest
0 голосов
/ 29 ноября 2009

Это мой запрос:

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

У меня такое ощущение, что я могу улучшить производительность, потому что вышеупомянутый запрос (поправьте меня, если я ошибаюсь) выполняет 2 обращения к серверу; 1 раз по счету, а затем при его выполнении.

Я хочу отправить этот подсчет в БД, так что это должен быть только один прием на сервер.

Даже это не совсем то, на самом деле это то, что мне нужно:

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)

Хотелось бы использовать этот SPROC (т.е. импорт функций и т. Д.), Но мне нужно Include("Vendor"), что ограничивает меня в этом с Linq.

Любые предложения будут действительно приветствоваться!

1 Ответ

1 голос
/ 29 ноября 2009

Вероятно, это не две поездки в базу данных. Он будет оптимизирован перед выполнением, и ничего не будет выполнено, пока вы не попробуете прочитать данные.

Обычно я проверяю SQL, созданный с использованием SQL Profiler. Я также нашел LinqPad очень полезным.

...