Я написал запрос Linq to CRM с помощью CRM 2011 RC (v5) поставщика LINQ-to-CRM.У меня есть локально объявленный список , который я хочу присоединить к объекту CRM, и я хочу, чтобы запрос выполнялся на сервере CRM.Пример может помочь:
MyObject myObject = new MyObject();
List<myAccount> myAccountsList = new List<myAccount>();
myAccountsList.Add(new myAccount() {AccountNumber = "123"};
myAccountsList.Add(new myAccount() {AccountNumber = "456"};
myObject.ListOfAccounts = myAccountsList;
var accountsQuery = from ax in myObject.ListOfAccounts
join a in orgContext.CreateQuery<customAccountEntity>() on ax.AccountNumber equals a.account_number
select a;
foreach(var item in accountsQuery)
{
Console.WriteLine("Id of record retrieved: " + a.Id.ToString());
}
Приведенный выше код компилируется и выполняется, однако фильтрация записей выполняется локально после получения всего набора записей сущности CRM.Очевидно, что когда сущность CRM содержит тысячи строк, запрос будет работать плохо или даже по таймауту.
Я прочитал об IQueryable и IEnumerable и попытался преобразовать список с помощью метода расширения AsQueryable (), который не дал эффекта.Мне нужен мой вышеупомянутый запрос Linq для запуска SQL следующим образом:
SELECT a.*
FROM customAccountEntity AS a
WHERE a.account_number IN ('123', '456');
Или с использованием временной таблицы, если требуется объединить несколько полей.Как мне это сделать?