Usar LINQ para crear una consulta
El proveedor de consulta Consulta integrada del lenguaje .NET (LINQ) en Microsoft Dataverse usa sintaxis LINQ estándar. El primer paso en la creación de una consulta de LINQ es identificar los tipos de tabla 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 tabla "raíz" única. El proveedor de consulta solo puede devolver filas de un único tipo de tabla. Las cláusulas orderby
y select
deben hacer referencia a esta tabla raíz. Puede usar cláusulas join
para agregar filas a una relación con la tabla "raíz".
Operadores LINQ
Todas expresiones de consulta LINQ tienen un formato similar. Las siguientes secciones muestran las cláusulas más comunes en una expresión de consulta LINQ al usar el proveedor de consulta LINQ de Dataverse.
de
Cuando se usa el contexto de servicio generado y el enlace en tiempo de compilación, use el conjunto de tablas IQueryable
, como AccountSet
, en el contexto generado.
Cuando se use el contexto generado, el método CreateQuery
del objeto del contexto del servicio le da acceso a las filas de tabla de Dataverse.
Ejemplo:
Mediante el contexto de servicio generado:
var query1 = from c in context.ContactSet
select c;
Usando el método CreateQuery
:
var query1 = from c in context.CreateQuery<Contact>()
select c;
join
La cláusula join
representa una combinación interna. La cláusula se usa para trabajar con dos o varias tablas que se pueden combinar con un valor de columna común.
Ejemplo:
from c in context.ContactSet
join a in context.AccountSet on c.ContactId equals a.PrimaryContactId.Id
donde
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 tabla único. Una condición compuesta que abarca varias tablas no es válida. En su lugar, cada tabla debe filtrarse en cláusulas where
independientes.
Ejemplo:
from a in context.AccountSet
where (a.Name.StartsWith("Contoso") && a.Address1_StateOrProvince == "WA")
orderby
El operador orderby
coloca las columnas de consulta devueltas en un orden especificado.
Ejemplo:
var query1 = from c in context.CreateQuery<Contact>()
orderby c.FullName ascending
select c;
foreach ( var q in query1)
{
Console.WriteLine(q.FirstName + " " + q.LastName);
}
seleccionar
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.
Ejemplo:
select new Contact
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
Address1_Telephone1 = c.Address1_Telephone1
};
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 o externa. Solo se admiten las uniones externas izquierdas. |
from |
Admite una cláusula from por consulta. |
where |
El lado izquierdo de la cláusula debe ser un nombre de columna 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 String Contains , StartsWith , EndsWith y Equals . |
groupBy |
No compatible. FetchXML admite opciones de agrupación que no están disponibles con el proveedor de consultas LINQ. Más información: Agregar datos mediante FetchXmlAgregar datos mediante FetchXml |
orderBy |
Admite la ordenación por columnas de tabla, 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 |
No compatible. FetchXML admite opciones de agregación que no están disponibles con el proveedor de consultas LINQ. Más información: Agregar datos mediante FetchXML. |
Filtrar varias tablas
Puede crear consultas complejas Consulta integrada del lenguaje .NET (LINQ) en Dataverse. Se usan varias cláusulas múltiples de Join
con cláusulas de filtro para crear un resultado que se filtra por columnas de varias tablas.
El siguiente ejemplo muestra cómo crear una consulta LINQ que funciona con dos tablas y que filtra el resultado según los valores de cada una de las filas de tabla.
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);
}
}
Consulte también
Crear consultas con LINQ (consulta integrada del lenguaje .NET)
Usar clase de entidad de enlace en tiempo de ejecución con una consulta LINQ
Ordene los resultados usando columnas de tabla con LINQ
Paginar grandes conjuntos de resultados con LINQ
Ejemplo: Consultar datos con LINQ
Ejemplos de la consulta LINQ mediante OrganizationServiceContext con Microsoft Dataverse
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).