J'ai le code suivant sur ma page:
var myVar= Entity.SetName
.Where(p => int.Parse(p.ID) >= start &&
int.Parse(p.ID) <= end);
start et end sont int, mais p.ID est une chaîne. Je devrais donc convertir p.ID en int. Mais j'obtiens l'erreur suivante:
LINQ to Entities ne reconnaît pas la méthode 'Int32 Parse (System.String) 'et cette méthode ne peut pas être traduite dans une expression de magasin.
Où est le problème??
Tout d'abord, je vous recommande vivement de vérifier la conception de votre base de données pour savoir s'il existe une très bonne raison pour que ID
soit string
. J'envisagerais de changer le type de base de données ID
en int
et vous résoudrez ce problème de conversion.
L'erreur que vous obtenez signifie que EF ne sait pas convertir la méthode Int32.Parse()
en SQL. En gros, vous avez deux options pour régler ce problème:
Faites la comparaison en dehors de linq aux entités:
var myVar= Entity.SetName.AsEnumerable()
.Where(p => int.Parse(p.ID) >= start &&
int.Parse(p.ID) <= end);
Mais il s’agit de non recommandé, car vous lisez un jeu de résultats complet à partir de la base de données avant d’appliquer la condition where
.
Ou bien créez fonction définie par le modèle personnalisé comme décrit dans cet article sur SO:
Convertir une chaîne en un entier dans EF 4.0 Ou Entity Framework: Où puis-je étendre le CSDL/MSL?
déplace la fonction d'analyse en dehors de l'expression linq.
int id = int.Parse(p.ID);
var myVar= Entity.SetName
.Where(p => id >= start && int.Parse(p.ID) <= end);
Commencez par essayer de convertir en int
puis transmettez ce nom de variable.
int catgry = Convert.ToInt32(customercategory.OWNERSHIP_TYPE);
var customerCateg = (from d in _db.tbl_SIL_CUSTOMER_CATEGORY_MST
.Where(d => d.CAT_ID == catgry) select d.CAT_TYPE).SingleOrDefault();
private void LoadDetail(int id)
{
var sp = from category in db.ProductCategories
join product in db.Products on category.ProductCategoryID equals product.ProductCategoryID
where id == int.Parse(category.ProductCategoryID)
select new
{
product.ProductID,
product.ProductName,
product.ProductCode,
product.Deception,
category.CategoryName,
product.Quanrity,
product.Price
};
DGVDetail.DataSource = sp.ToList();//help: Error: LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression
}
private void DGVMaster_CellClick(object sender, DataGridViewCellEventArgs e)
{
int index = e.RowIndex;
LoadDetail(index + 1);
}