J'utilise Entity Framework et j'ai une ligne de code qui convertit une variable var en une clé pour la base de données.
var record = context.enrollments.SingleOrDefault
(row => row.userId == int.Parse(UserID) && row.classId == int.Parse(ClassID));
Chaque fois que j'essaie de l'exécuter, je reçois une erreur rhis. "LINQ to Entities ne reconnaît pas la méthode" Int32 Parse (System.String) ", et cette méthode ne peut pas être traduite en une expression de magasin."
J'ai aussi essayé ça
var record = context.enrollments.FirstOrDefault
(row => row.userId == Convert.ToInt32(UserID)
&& row.classId == Convert.ToInt32(ClassID));
et tout ce que je reçois, c'est ce message d'erreur: "LINQ to Entities ne reconnaît pas la méthode" Int32 ToInt32 (System.String) ", et cette méthode ne peut pas être traduite en expression de magasin.
enfin, j’ai aussi essayé cette méthode, ce qui est inhabituel à mon avis, mais cela a déjà fonctionné dans le passé pour des situations similaires.
var record = context.enrollments.SingleOrDefault
(row => row.userId == CommonDLL.Sanitize<int>.ConvertType(UserID)
&& row.classId == CommonDLL.Sanitize<int>.ConvertType(ClassID));
Dans lequel je reçois cette erreur. Comme vous pouvez le constater, j'ai essayé plusieurs choses et rien ne fonctionne. Toute aide serait donc très utile.
dans Linq to Entity
, vous devez utiliser les méthodes de votre query
qui est prise en charge par votre provider
pour les convertir en expression tree
afin qu'elles s'exécutent sur votre côté Data Base
.
tous les fournisseurs doivent prendre en charge certaines méthodes appelées par défaut Canonical Functions
( Read More Here ), et vous pouvez également définir votre user defined function
et stored procedure
comme edm functions
à utiliser dans linq query
( Read More Here ) et ( Here ).
en outre, vous pouvez utiliser des méthodes prises en charge par les fournisseurs et converties en expression tree
qui se trouvent dans EntityFunctions et SqlFunctions .
et pour finir sur votre question, vous pouvez convertir UserID
et ClassID
avant votre requête, comme ceci:
var UID = int.Parse(UserID);
var CID = int.Parse(ClassID);
var record = context.enrollments.SingleOrDefault
(row => row.userId == UID && row.classId == CID);
Cela fonctionne pour moi:
var iId = int.Parse(TextBox1.Text);
var item = db.Items.Where(p => p.ItemID == iId ).FirstOrDefault();
Pour que cela fonctionne, vous devez convertir la valeur de votre zone de texte en dehors de l'expression lambda.