Simple Linq Select ne fonctionne pas


Question

J'essaie de sélectionner une liste d'entiers et cela soulève une exception.

Message d'exception: System.ArgumentException: L'expression de type 'System.Collections.Generic.IAsyncEnumerable1 [System.Int32]' ne peut pas être utilisée pour le paramètre de type 'System.Collections.Generic.IAsyncEnumerable1 [System.Object]' de la méthode 'System. Collections.Generic.IAsyncEnumerable1 [MyProject.Model.Entities.MyTable] CastModel 'Nom du paramètre: arg0

Étapes pour reproduire

Modèle

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

Exécutez la requête ci-dessous (ou une requête similaire):

public class MyTable { 
  public int MyTableId { get; set; } 
  public int SomeKey { get; set; } 
  public int MyFieldIntegerIWant { get; set; } 
} 

Autres détails techniques

Version EF Core: 1.1.0

Fournisseur de base de données: Microsoft.EntityFrameworkCore.SqlServer

Système d'exploitation: Windows 7

IDE: Visual Studio 2015

METTRE À JOUR:

The issue had something to do with EF Plus' QueryFilters https://github.com/zzzprojects/EntityFramework-Plus/issues/133.

Réponse d'expert

Après discussion avec @thejason,

Le problème n'était pas causé par Entity Framework Plus, mais par la manière dont EF Core gérait la conversion.

Le problème peut être facilement reproduit à l'aide du code suivant:

using (var ctx = new CurrentContext())
{
    int keyId = 1;

    var ids = ctx.MyTables
        .Cast<IMyTable>()
        .Cast<MyTable>()
        .Where(x => x.SomeKey.Equals(keyId))
        .Select(x => x.MyFieldIntegerIWant)
        .ToList();
}

La méthode de conversion sera corrigée dans EF Core 2.x





Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi