LINQ to entities ne reconnaît pas la méthode 'Int32
public ActionResult ReadXMLDevices(int groupID)
{
var query = from k in XMLEntities.unassigneditems
where k.DevOrAcc == true && k.Group == groupID
select k;
var view_query = from i in query
select new GetFreeDevices
{
MArticleNumber = i.ArticleNumber,
MFirmware = i.Firmware,
MGroup = i.Group,
MName = i.Name,
MSoftware = i.SoftwareVersion,
SA = GetNumberOfDevices(i.ArticleNumber,2),
STH = GetNumberOfDevices(i.ArticleNumber,3),
SASTH = GetNumberOfDevices(i.ArticleNumber,7)
};
return PartialView(view_query);
}
public int GetNumberOfDevices(string artNo,int loc)
{
var num_dev = (from k in XMLEntities.deviceview
where k.Reserved == false && k.Sold == false && k.LocationNameId == loc && k.ArticleNumber == artNo
select k).Count();
return num_dev;
}
Erreur:
LINQ to entities ne reconnaît pas la méthode 'Int32 GetNumberOfDevices(Système d'.Chaîne, Int32)', et cette méthode ne peut pas être traduit dans un magasin d'expression. Comment résoudre ce problème???
Vous devez vous connecter pour publier un commentaire.
Vous pouvez diviser votre requête dans les deux afin d'être sûr que la liste est en mémoire avant d'appeler la
GetNumberOfDevices()
méthode. Vous pouvez faire une requête en mémoire par la conversion des résultats d'uneList
, ou dans ce cas, unList<GetFreeDevices>
. De cette façon, LinQ to entities ne pas avoir à faire toutes les traductions vers et à partir de XML et vous pouvez utiliser votreGetNumberOfDevices()
méthode.Veuillez noter que la dernière déclaration de la PartialView à accepter une liste ou
IEnumerable
au lieu d'uneIQueryable
.Il y a un autre moyen facile.
D'abord, charger les données à partir de la base de données de la mémoire:
Ensuite, faire ce que vous voulez avec linq-to-objets, pas L2E:
Vous pouvez utiliser cette astuce pour toutes les méthodes que L2E ne prend pas en charge.