Фильтр Linq возвращает набор на основе таблицы в отдельной БД - PullRequest
0 голосов
/ 15 августа 2011

У меня есть две таблицы. Один в одной базе данных и один в отдельной базе данных. Мне нужно заполнить выпадающий список опциями с первого, отфильтрованного по второму. Я использую Linq-to-SQL. Ниже показано, как я вытягиваю «нефильтрованный» список.

public static DataTable GetSPCCodeList()
{   
   using (var context = ProviderDataContext.Create())
   {
      IQueryable<tblProviderAdminSPCCode> tSPCCode = context.GetTable<tblProviderAdminSPCCode>();
      return (tSPCCode
                 .Where(spcCode => spcCode.Inactive == null)
                 .OrderBy(spcCode => spcCode.SPCCodeID)
                 .Select(spcCode => new 
                                    { spcCode.SPCCodeID, spcCode.SPCDescription, 
                                      spcCode.SPCCategoryID }))
                 .CopyLinqToDataTable();
   }
}

Таблица, к которой мне нужно отфильтровать, просто содержит столбец для SPCCodeID. Как мне отфильтровать мой список на основе их существования во второй таблице?

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Создайте и выполните запрос LINQ в другой базе данных, чтобы получить коллекцию ваших SPCCodeID s в переменную памяти, например,

IList<int> spcCodeIDs = /* query goes here */;

Затем выполните свой запрос, но замените предложение Where следующим образом

.Where(spcCode => spcCode.Inactive == null
                    && spcCodeIDs.Contains(spcCode.SPCCodeID))
1 голос
/ 15 августа 2011

Я бы создал список этих значений SPCCodeID из другой базы данных, а затем изменил бы ваше условие where на:

.Where(spcCode => spcCode.Inactive == null && spcCodeList.Contains(spcCode.SPCCodeID))

Не забудьте сделать scpCodeList реальным списком, используя ToList (), потому что я думаю, что у него будут проблемы, если вы сделаете запрос с двумя разными DataContexts.

0 голосов
/ 15 августа 2011

Вы можете фактически сделать LINQ to SQL выбором из нескольких баз данных SQL одновременно, если они находятся на одном сервере и доступны в одной строке подключения.

Существует два варианта:

  1. Создание представления в первой базе данных со ссылкой на вторую
  2. Создание временного контекста данных, копирование деталей DBML и изменение имени таблицы

Полная информация о том, какчтобы сделать это на самом деле перечислены в моем блоге, а не повторять их здесь: http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3

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