Я написал запрос Linq для CRM, используя CRM-провайдер CRM 2011 RC (v5) LINQ-to-CRM. У меня есть локально объявленный список <T>, который я хочу присоединиться к объекту CRM, и я хочу, чтобы запрос выполнялся на сервере CRM. Пример может помочь:LINQ to Dynamics 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');
Или используя временную таблицу, если хотел присоединиться по нескольким полям. Как я могу это сделать?
Я уже использую поставщика запроса Linq-на-УРК - Могу ли я использовать более одного провайдера в одном запросе? – Iftekhar
Хорошо, посмотрев поближе к вашему запросу, я думаю, вы должны сделать это наоборот (нет соединения, но содержит) – Guillaume86
Я хочу, чтобы мой запрос был переведен на SQL и фильтрацию для запуска на SQL Server. Метод Содержит метод просто фильтрует локально. – Iftekhar