Translate Array[][].Contains(x.<array property>)

Abierto
#3,634 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
28/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
csharp, postgresql

Línea de trabajo

This is a query-translation gap in the Npgsql EF Core provider for nested int[] compared with SequenceEqual, Contains, or Join. Reproduce with the Part entity and the three snippets in the issue against Npgsql.EntityFrameworkCore.PostgreSQL 9.0.4; the errors mention unnest(... ) WITH ORDINALITY lacking a type mapping. Start from how array and nested-array type mappings are applied in the SQL tree, then add coverage for Contains/SequenceEqual/Join of array-of-array parameters. Done when those LINQ shapes translate and execute without the mapping exceptions.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I encountered another issue regarding arrays.

I have a class with an array property:

public class Part {
    public int Id { get; set; }
    public int[] TaxonomyPath { get; set; }
}

Now I want to query for all Parts where TaxonomyPath is in [[1, 2], [4,7], [3,9]]:

int[][] expected = [[1, 2], [4,7], [3,9]];
await dbContext.Parts
    .Where(x => expected.Any(e => x.TaxonomyPath.SequenceEqual(e)))
    .ToArrayAsync();

This throws:

Expression 'unnest(@__existing_0) WITH ORDINALITY AS e(value)' in the SQL tree does not have a type mapping assigned.

When I change SequenceEqual to == it throws:

Couldn't find array type mapping when applying item/array mappings

Same when using Where(x => expected.Contains(x.TaxonomyPath).

Also when joining (which is the actual goal):

int[][] expected = [[1, 2], [4,7], [3,9]];
await dbContext.Parts
            .Join(expected,
                x => x.TaxonomyPath,
                x => x,
                (p, _) => p)
    .ToArrayAsync();

It throws:

Expression 'unnest(@__p_0) WITH ORDINALITY AS p(value)' in the SQL tree does not have a type mapping assigned.

I am using Npgsql.EntityFrameworkCore.PostgreSQL 9.0.4.

Lenguaje dominante
C#
Estrellas
1.8k
Forks
268
Merge medio
2 h 35 min
PR fusionados (30 d)
136

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de npgsql/efcore.pg

Todos los issues de npgsql/efcore.pg

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.