Compartir a través de


Uso de proveedores observables

Al implementar la interfaz IQbservable y usar los métodos de extensión de fábrica proporcionados por el tipo Qbservable , puede escribir un proveedor LINQ personalizado para consultar cualquier tipo de datos externos, de modo que estos datos se traten como secuencias a las que se puede suscribir. Por ejemplo, en el ejemplo LINQ to WQL del Centro para desarrolladores de RX MSDN se muestra cómo crear un proveedor sencillo para consultar eventos WMI mediante WQL. Puede usar los operadores LINQ de fábrica proporcionados por el tipo Qbservable para abstraer una secuencia de eventos y consultas WMI, filtrarlos y redactarlos. La suscripción a esta secuencia desencadenará la traducción de la expresión de consulta LINQ al lenguaje de destino, en este caso WQL. 

Uso de la interfaz IQbservable para consultar datos externos

Cuando mencionamos que queremos consultar datos, primero nos preocupa lo que queremos consultar. Puede ser una colección IEnumerable basada en extracción o una secuencia observable asincrónica basada en inserción. También queremos saber dónde (en qué contexto) queremos ejecutar la consulta. En el caso de las secuencias observables , que controla la interfaz IScheduler y sus distintos tipos de implementación de Scheduler. Por último, queremos saber cómo hacemos la consulta. Podemos representar una consulta (una expresión lambda) en código textual (compilado en código de lenguaje intermedio (IL) de .NET), en el que cada operador de la consulta se evaluará de forma lineal. Este es el caso de los métodos de operador de fábrica del tipo Observable . O bien, puede representar la consulta mediante árboles de expresión, que se pueden recorrer para obtener el algoritmo representado (por ejemplo, predecir si un elemento es mayor que un valor, etc.), luego traducir el algoritmo en algún código específico del dominio, como una instrucción de consulta T-SQL para consultar una base de datos SQL, solicitudes HTTP específicas para un URI de servicio web determinado, Comandos de PowerShell, DSQLs para servicios de notificación en la nube, etc. Este es el caso de los métodos de operador de fábrica del tipo Qbservable . El código traducido específico del dominio se puede ejecutar en un sistema de destino remoto, o bien puede usar la representación del árbol de expresión para realizar la optimización de consultas locales.

Al igual que IObservable/IObserver es un dual de IEnumerable/IEnumerator, IQbservable es el dual de IQueryable y proporciona una representación de árbol de expresión de una consulta IObservable. Puede cambiar entre tipos IQbservable e IObservable mediante los métodos AsQbservable y AsObservable. La llamada a AsQbservable genera un árbol de expresión formado por un único nodo que llama a la instancia IObservable original. Esta relación es importante para comprender por qué se debe definir una consulta IQbservable completa a partir de una secuencia IQbservable y no se puede obtener simplemente llamando a AsQbservable en una consulta IQbservable existente. En el ejemplo siguiente, la llamada a AsQbservable genera un árbol de consulta completo solo cuando se compila la consulta aplicando IQbservable AsQbservable al origen de datos.

var source = Observable.Interval(TimeSpan.FromSeconds(1));
var q = source.AsQbservable();
Console.WriteLine(q.ToString());
var sub = q.Subscribe(Console.WriteLine);
Console.ReadKey();

La interfaz IQbservable está pensada para su implementación por parte de proveedores de consultas. Solo se supone que los proveedores implementan IQbservable<T>. Si el proveedor no implementa también IQbservable<T>, los operadores de consulta estándar no se pueden usar en el origen de datos del proveedor. La interfaz IQbservable hereda la interfaz IObservable para que, si representa una consulta, los resultados de esa consulta se pueden suscribir. La suscripción y la publicación hacen que se ejecute el árbol de expresiones asociado a un objeto Qbservable . La definición de "ejecutar un árbol de expresión" es específica de un proveedor de consultas. Por ejemplo, puede implicar la traducción del árbol de expresiones a un lenguaje de consulta adecuado para el origen de datos subyacente. La propiedad Expression encapsula el árbol de expresiones asociado a la instancia IQbservable , mientras que el proveedor encapsula el proveedor de consultas asociado al origen de datos.

El conjunto de métodos declarados en la clase Qbservable proporciona una implementación de los operadores de consulta estándar para consultar orígenes de datos que implementan IQbservable. Los operadores de consulta estándar son métodos de uso general que siguen el patrón LINQ y permiten expresar operaciones de recorrido, filtro y proyección sobre los datos de cualquier . Lenguaje de programación basado en NET. La mayoría de los métodos de esta clase se definen como métodos de extensión que extienden el tipo IQbservable . Esto significa que se pueden llamar como un método de instancia en cualquier objeto que implemente IQbservable. Estos métodos que extienden IQbservable no realizan ninguna consulta directamente. En su lugar, su funcionalidad es crear un objeto Expression, que es un árbol de expresiones que representa la consulta acumulativa. A continuación, los métodos pasan el nuevo árbol de expresiones al método CreateQuery. La ejecución de la consulta real en los datos de destino se realiza mediante una clase que implementa IQbservable.

Consulte también

Referencia

IQbservable
Qbservable

Otros recursos

Centro para desarrolladores de MSDN rx