web-dev-qa-db-fra.com

LINQ to Entities ne reconnaît pas la méthode 'System.String ToString (Int32)'

Bonjour, j'utilise une requête linq qui génère l'erreur LINQ to Entities ne reconnaît pas la méthode 'System.String ToString (Int32)', et cette méthode ne peut pas être traduite en une expression de magasin.

        List<string> resultMap = (from item in mapResult
                                  select Convert.ToString(item.ResultDE)).ToList();

Une erreur se produit dans cette déclaration

        List<Result_DE> resultList = (from result in db.Result_DE
                                      where result.IsActive == "1"
                                      && resultMap.Contains(Convert.ToString(Convert.ToInt32(result.ID)))
                                      select result).ToList();

dites-moi s'il vous plaît la bonne façon d'écrire cette requête.

5
user1590948

Vous ne pouvez pas utiliser ces fonctions de conversion dans une instruction LINQ to Entities, elles ne peuvent pas être traduites en SQL, vous devez effectuer les conversions en mémoire. Mais je ne pense pas que vous ayez besoin de faire ça du tout.

Si vous utilisiez simplement la resultMap pour obtenir votre resultList, filtrée par Results dont la Id est présente dans mapResult, procédez comme suit:

var resultList = db.Result_DE
    .Where(r => r.IsActive == "1" && mapResult.Any(mr => mr.ResultDE == r.ID));
    .ToList();

Si mapResult est une collection en mémoire, au lieu d'une IQueryable attachée au contexte db, procédez comme suit:

var resultIds = mapResult.Select(mr => mr.ResultDE).ToList();
var resultList = db.Result_DE
    .Where(r => r.IsActive == "1" && resultIds.Contains(r.ID));
    .ToList();
2
Alex

Avant d'appeler une méthode (par exemple, ToString ()), vous devez convertir LINQ en objet à l'aide de AsEnumerable (). 

2
Pritam De

Utilisez SqlFunctions.StringConvert au lieu de Convert.ToString.

Une question similaire a été posée et a répondu ici

0
Gabriel Rainha

si votre item.ResultDE et result.ID est un type de variable de Int32, Pourquoi ne pas créer directement un List<Int32>?

List<Int32> resultMap = (from item in mapResult
                              select item.ResultDE).ToList<Int32>();

List<Result_DE> resultList = (from result in db.Result_DE
                                  where result.IsActive == "1"
                                  && resultMap.Contains(result.ID)
                                  select result).ToList<Result_DE>();
0
Yu Yenkan