Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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 StringContains, StartsWith, EndsWith y Equals. |
groupBy |
No compatible. FetchXML admite las 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 las 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