Временная таблица в LINQ to Entities - PullRequest
3 голосов
/ 05 ноября 2010

У меня огромная таблица идентификаторов пользователей.
У меня есть массив идентификаторов пользователей, которые мне нужны.
У меня есть две таблицы с ключом идентификатора внешнего пользователя.

Чтолучший способ получить эту информацию с точки зрения производительности?

В идеале, в SQL конечный результат должен выглядеть примерно так (нулевые значения, если в одной таблице нет идентификатора пользователя, но нет другой):

userid  table1value table2value
1        null          12
5        123           null

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Насколько я знаю, у LINQ to Entities нет способа создать временную таблицу на лету ... Я думаю, что самым близким было бы использование LINQ to Objects с классом или создание анонимноговведите.

Или сделайте это в сохраненном процессе, и импортируйте процесс в контекст объекта, и ваш код вызовет процесс.Proc может создать временную таблицу или что угодно.

HTH.

1 голос
/ 05 ноября 2010

У меня была та же проблема в прошлом году, а затем, когда дело дошло до производительности, вместо того, чтобы взять временную таблицу для хранения записей (конец приложения или конец службы), O перешел в LINQ to SQL, создал хранимую процедуру и вызвал ее сущности, такие как LINQ для хранимой процедуры =). И моя хранимая процедура выполнила все и вернула только те записи, которые мне нужны, и я выполнила разбиение на страницы в конце хранимой процедуры, так что я получала ограниченные данные за раз, а не все данные в приложении.

Дайте мне знать, если вам нужна помощь в этом. Я также приведу фрагмент кода.

1 голос
/ 05 ноября 2010

Ну, LINQ позволяет вам объединять коллекции (сущности) так же, как это делает SQL, так что вы можете создать несколько внешних объединений для получения данных, и это СЛЕДУЕТ преобразовать в относительно эффективный оператор SQL при передаче Entity Framework.Вот небольшой пример:

var results = from u in UserDataSource
   join t1 in Table1DataSource on u.UserId = t1.UserId into gj
   from jt1 in gj.DefaultIfEmpty()
   select new {u.UserId, Table1Data = jt1 == null ? String.Empty : jt1.Data};

Если таблицы действительно огромные или требуется дополнительная обработка для получения результата, я бы рассмотрел создание представления на сервере и сопоставление его с Entity вкод.Тогда это становится очень простым выбором;Вы просто фильтруете результаты просмотра по идентификаторам пользователей, которых хотите видеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...