he escrito una consulta LINQ a CRM utilizando CRM 2011 RC (v5) proveedor de LINQ-a-CRM. Tengo una lista localmente declarada <T> que quiero unir a una entidad CRM y quiero que la consulta se ejecute en el servidor CRM. Un ejemplo puede ayudar a:LINQ para filtrar registros Dynamics CRM de consulta a nivel local
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());
}
El código anterior se compila y ejecuta, sin embargo, el filtrado de los registros se está realizando a nivel local después de recuperar la totalidad del conjunto de registros entidad CRM. Obviamente, cuando la entidad CRM contiene miles de filas, la consulta tendrá un rendimiento bajo o incluso un tiempo de espera excedido.
He leído sobre IQueryable y IEnumerable y trató de convertir la lista utilizando el método de extensión AsQueryable(), que no tuvo ningún efecto. Necesito mi anterior consulta LINQ para ejecutar SQL como esto:
SELECT a.*
FROM customAccountEntity AS a
WHERE a.account_number IN ('123', '456');
o usando una tabla temporal si se desea unirse en múltiples campos. ¿Cómo puedo lograr esto?
ya estoy usando el proveedor de consulta LINQ-a-CRM - ¿Puedo utilizar más de un proveedor en la misma consulta? – Iftekhar
Ok, después de mirar más de cerca tu consulta, creo que deberías hacerlo al revés (sin unir sino con un contenido) – Guillaume86
Quiero que mi consulta se traduzca a SQL y que el filtrado se ejecute en SQL Server. El método de extensión Contiene simplemente filtra localmente. – Iftekhar