Usar LINQ para crear una consulta
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
El proveedor de consulta de Consulta integrada del lenguaje .NET (LINQ) en Microsoft Dynamics CRM 2015 y actualización de Microsoft Dynamics CRM Online 2015 usa sintaxis de LINQ estándar. El primer paso en la creación de una consulta de LINQ es identificar los tipos de entidad relevantes y las relaciones entre ellos. A continuación puede especificar el origen de datos y los demás parámetros de consulta.
La cláusula from se usa para devolver una entidad "raíz" única. El proveedor de consulta solo puede devolver entidades de un único tipo de entidad. Las cláusulas orderby y select deben hacer referencia a esta entidad raíz. Puede usar cláusulas join para agregar entidades a una relación con la entidad "raíz".
En este tema
Operadores LINQ
Limitaciones de LINQ
Filtrar varias entidades
Operadores LINQ
Todas expresiones de consulta LINQ tienen un formato similar. La siguiente tabla muestra las cláusulas más comunes en una expresión de consulta LINQ al usar el proveedor de consulta LINQ de Microsoft Dynamics 365.
Operador LINQ |
Descripción |
Ejemplo |
---|---|---|
Obtenga un origen de datos (la cláusula from) |
Cuando se usa el contexto de servicio generado y el enlace en tiempo de compilación, use el conjunto de entidades IQueryable, como AccountSet, en el contexto generado. Cuando se use el contexto generado, el método CreateQuery del objeto del contexto del servicio de la organización le da acceso a las entidades Microsoft Dynamics 365. |
Mediante el contexto de servicio generado:
Usando el método CreateQuery:
|
Cláusula join |
La cláusula join representa una combinación interna. La cláusula se usa para trabajar con dos o varias entidades que se pueden combinar con un valor de atributo común. |
|
Filtrado (la cláusula where) |
La cláusula where aplica un filtro a los resultados, ofreciendo a menudo una expresión booleana. El filtro especifica qué elementos se excluirán de la secuencia de origen. Cada cláusula where solo puede contener condiciones frente a un tipo de entidad único. Una condición compuesta que abarca varias entidades no es válida. En su lugar, cada entidad debe filtrarse en cláusulas where independientes. |
|
orderby |
El operador orderby coloca los atributos de consulta devueltos en un orden especificado. |
|
Cláusula select |
La cláusula select define el formulario de los datos devueltos. La cláusula crea un conjunto de columnas basándose en los resultados de la expresión de consulta. También puede definir una instancia de un nuevo objeto con el que trabajar. El objeto recién creado mediante la cláusula select no se crea en el servidor, sino que es una instancia local. |
|
Limitaciones de LINQ
El proveedor de la consulta LINQ admite un subconjunto de los operadores LINQ. No se admiten todas las condiciones que se pueden expresar en LINQ. La siguiente tabla muestra algunas de las limitaciones de los operadores LINQ básicos.
Operador LINQ |
Limitaciones |
---|---|
join |
Representa una combinación interna. No se pueden realizar combinaciones externas. |
from |
Admite una cláusula from por consulta. |
where |
El lado izquierdo de la cláusula debe ser un nombre de atributo y el lado derecho de la cláusula debe ser un valor. No puede establecer el lado izquierdo de una constante. Ambos lados de la cláusula no pueden ser constantes. Admite las funciones StringContains, StartsWith, EndsWith y Equals. |
groupBy |
Incompatible. FetchXML admite las opciones de agrupación que no están disponibles con el proveedor de consultas LINQ.Más información:Usar el agregado FetchXML |
orderBy |
Admite la ordenación por atributos de entidad, como Contact.FullName. |
select |
Admite inicializadores, constructores y tipos anónimos. |
last |
El operador last no es compatible. |
skip y take |
Admite skip y take mediante la paginación del lado servidor. El valor skip debe ser superior o igual al valor take. |
aggregate |
Incompatible. FetchXML admite las opciones de agregación que no están disponibles con el proveedor de consultas LINQ.Más información:Usar el agregado FetchXML |
Filtrar varias entidades
Puede crear consultas complejas de Consulta integrada del lenguaje .NET (LINQ) en Microsoft Dynamics CRM 2015 y Microsoft Dynamics CRM Online. Se usan varias cláusulas múltiples de Join con cláusulas de filtro para crear un resultado que se filtra por atributos de varias entidades.
El siguiente ejemplo muestra cómo crear una consulta LINQ que funciona con dos entidades y que filtra el resultado según los valores de cada una de las entidades.
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var query_where3 = from c in svcContext.ContactSet
join a in svcContext.AccountSet
on c.ContactId equals a.PrimaryContactId.Id
where a.Name.Contains("Contoso")
where c.LastName.Contains("Smith")
select new
{
account_name = a.Name,
contact_name = c.LastName
};
foreach (var c in query_where3)
{
System.Console.WriteLine("acct: " +
c.account_name +
"\t\t\t" +
"contact: " +
c.contact_name);
}
}
Using svcContext As New ServiceContext(_serviceProxy)
Dim query_where3 = From c In svcContext.ContactSet _
Join a In svcContext.AccountSet _
On c.ContactId Equals a.account_primary_contact.Id _
Where a.Name.Contains("Contoso") _
Where c.LastName.Contains("Smith") _
Select New With {Key .account_name = a.Name,
Key .contact_name = c.LastName}
For Each c In query_where3
Console.WriteLine("acct: " & c.account_name & vbTab & vbTab _
& vbTab & "contact: " & c.contact_name)
Next c
End Using
Ver también
Ejemplo: crear una consulta LINQ
Ejemplo: consultas complejas de LINQ
Crear consultas con LINQ (consulta integrada del lenguaje .NET)
Usar clase de entidad de enlace en tiempo de ejecución con una consulta LINQ
Blog: complemento LINQPad para MS Dynamics CRM 2011
© 2017 Microsoft. Todos los derechos reservados. Copyright