/ / Le type de noeud d'expression LINQ 'ArrayIndex' n'est pas pris en charge dans LINQ to Entities. mais est supporté par linq-to-sql - entity-framework

Le type de noeud d'expression LINQ 'ArrayIndex' n'est pas pris en charge dans LINQ to Entities. mais est supporté par linq-to-sql - entité-framework, linq-to-sql, linq-to-Entités

Un projet vient de passer de linq-to-sql à linq-to-entity, et maintenant je reçois l'erreur

The LINQ expression node type "ArrayIndex" is not supported in LINQ to Entities.

pour cette ligne:

var a = db.Table.Single(d => d.Date == dates[0]);

(Dans ce cas particulier, il est facile de le réparer, comme dans

var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);

)

Mais pourquoi cela fonctionne-t-il dans linq-to-sql mais pas dans linq-to-entity? Ont-ils rendu linq-to-entités pire que linq-to-sql? Qu'est-ce que je rate?

Réponses:

3 pour la réponse № 1

C’est parce que L2E essaie simplement de traduire votre requête en une commande SQL. Ainsi, tout élément supplémentaire (des méthodes telles que .ToString () et d’autres éléments qui ne peuvent pas être traduits en SQL) entraîne cette exception.

Cependant, L2S comme linq to objects implémenteIEnumerable. Leur objectif est donc différent: L2E convertit les requêtes linq en commandes SQL, L2O fonctionne avec des objets IEnumerable en mémoire et L2S modélise et utilise une base de données.

Maintenant, si vous voulez pouvoir utiliser vos requêtes L2S dans votre projet EF (en utilisant L2E), vous devez d’abord convertir vos données extraites de votre DbContext en IEnumerable:

var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...