Рейтинг:
1
Dave Kreskowiak
Это медленно, потому что вы делаете проекцию, выбор нового. Вы создаете новый объект для каждой записи в обеих таблицах, а затем выполняете объединение для них.
Если у вас есть тысячи записей в этих таблицах, вы создаете тысячи объектов, по одному за раз. Это займет некоторое время.
Если вы хотите ускорить этот процесс, вам придется либо избегать проекции, либо заставить базу данных делать все за вас, но это означает, что вам придется избегать использования LINQ и идти прямо к базе данных.
ben the great
Спасибо, что ответили.
Можете ли вы привести мне пример того, как вы справитесь с этим? Я использую это, чтобы установить источник данных на devexpress xtragrid incase, который имеет значение.
Dave Kreskowiak
Создайте представление в базе данных, содержащее все необходимые записи и поля.
Настройте представление в своем контексте точно так же, как вы сделали бы это для обычной таблицы базы данных.
После этого это просто простой из...выберите на этом "столе".
ben the great
как мне создать его без каких-либо связей, просто выбрав все записи из обеих таблиц?
с именами столбцов, как в моем коде. таким образом, имя клиента и имя поставщика находятся в одном столбце. сначала все клиенты, потом все продавцы.
ben the great
Выберите dbo.Покупатель.CustomerName, ДБО.Покупатель.UniqueID от dbo.Объединение клиентов выберите dbo.Vendor.VendorName, dbo.Vendor.Уникальный идентификатор
От dbo.Vendor
Это, по-видимому, работает в представлении, созданном в среде sql management studio. затем я создал datacontext и перетащил на него представление.
затем я сделал это в своем коде:
qCustomerVendorNames = From tmp In m_dbViewCustVend.View_CustomersVendors
Выберите Создать с помощью {.Name = tmp.CustomerName, tmp.Уникальный идентификатор}
Кажется, что он загружается гораздо быстрее. Есть причины не продолжать в том же духе?
Dave Kreskowiak
Вот и все. Вы все еще делаете проекцию, которая создает объект для каждой возвращенной записи, но это зависит от вас. Большая часть тяжелой работы теперь выполняется базой данных, а не клиентом.