ben the great Ответов: 1

Получить данные все данные из 2 таблиц с помощью linqtosql VB.NET


Привет,

Я хочу получить все данные из таблицы 2 с помощью linqtosql.
Нижеприведенное работает и дает правильные результаты (хотелось бы еще его отсортировать), но это невероятно медленно.

Мне просто нужны все записи из 2-х таблиц.

Может ли кто - нибудь помочь с этим?

Что я уже пробовал:

qCustomerVendorNames = (
                           From tmpCust In m_dbCustomersVendors.Customers
                           Select New With {
                               .Name = tmpCust.CustomerName,
                               .CompanyType = "Customer",
                               tmpCust.UniqueID
                           }
                       ).Union(
                           From tmpVend In m_dbCustomersVendors.Vendors
                           Select New With {
                               .Name = tmpVend.VendorName,
                               .CompanyType = "Vendor",
                               tmpVend.UniqueID
                           }
                       )

1 Ответов

Рейтинг:
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

Вот и все. Вы все еще делаете проекцию, которая создает объект для каждой возвращенной записи, но это зависит от вас. Большая часть тяжелой работы теперь выполняется базой данных, а не клиентом.

Maciej Los

5ed!

Maciej Los

5ed!