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.
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();
Avant d'appeler une méthode (par exemple, ToString ()), vous devez convertir LINQ en objet à l'aide de AsEnumerable ().
Utilisez SqlFunctions.StringConvert au lieu de Convert.ToString.
Une question similaire a été posée et a répondu ici
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>();