es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cosmos DB IQueryable en campos nulos.

Tengo este campo en mi modelo:

public class Lead {
   ....
   public Guid? ClientId { get; set; }
}

Cuando intento filtrar en este campo usando IQueryable en el código de esta manera:

var queryable = container.GetItemLinqQueryable<Lead>()
            .OrderBy(l => l.Created)
            .AsQueryable();
....
//Use a list of GUIDs to filter on
if (search.ClientId?.Any() == true)
{
   queryable = queryable.Where(lead => lead.ClientId.HasValue && search.ClientId.Contains(lead.ClientId.Value));
}
return queryable;

Espero que se agregue la siguiente cláusula WHERE cuando se traduce a SQL:

WHERE IS_DEFINED(c.clientId) AND c.clientId IN ('some GUID', 'another GUID', 'and so on')

En la práctica, esta instrucción LINQ se convierte en esto:

SELECT VALUE root FROM root WHERE (root['clientId']['hasValue'] AND (root['clientId']['value'] IN ('e870a235-ccb0-4a78-81b3-05dce5ac8a7f'))) ORDER BY root['created'] ASC

Cuando ejecuto el código, la consulta no devuelve ningún objeto cuando se ejecuta, aunque hay documentos con el GUID especificado en el campo en el contenedor. Mi proyecto está utilizando la última versión de Microsoft.Azure.Cosmos (3.23.0) según puedo ver en el administrador de paquetes de Nuget.

¿Qué estoy haciendo mal en mi código C#? ¿Existe alguna manera de hacer que esto funcione?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, no puedo ejecutar código, pero según el código e información proporcionada, parece que la función está filtrando y construyendo correctamente la cláusula WHERE.

    Sin embargo, es posible que el problema se encuentre en los datos contenidos en el Cosmos DB. En particular, es posible que el campo ClientId no se encuentre poblado con los GUIDs esperados.

    Una forma de comprobar esto es ejecutando una consulta directamente en el Explorador de Datos de Azure Portal o en otra herramienta de Cosmos DB, usando la misma cláusula WHERE como en el código C#, pero sin el ordenamiento y paginación adicional realizados en el código C#.

    Si la consulta no devuelve resultados, entonces es probable que el problema se encuentre en los datos del contenedor. De lo contrario, podría tratarse de un error o problema de configuración en el SDK o base de datos de Cosmos DB.

    Para seguir investigando, también podría intentar agregar más registros de depuración o de seguimiento al código C#, como por ejemplo imprimir la cláusula WHERE generada o inspeccionar los objetos Lead devueltos por el objeto consultable.

Comments are closed.