Int.Analyser dans l'Expression Linq
J'ai suivantes expression linq. Je veux calculer la somme des valeurs numériques de type Nvarchar champ. Je utiliser le code suivant pour ce faire. Mais j'obtiens une erreur lorsque je tente de l'exécuter.
var m = new MaterialModelContainer();
var list = (from x in
(
from inv in m.INVs
join l in m.LIBs on inv.MESC equals l.MESC
join o in m.OUTs on inv.MESC equals o.MESC
join t in m.TRANs on inv.MESC equals t.MESC
where t.TYPE == "60"
select new
{
l.MESC,
l.LINE_NO,
l.UNIT_LINE,
Description = l.DES + " " + l.PART_NO,
inv.NEW_QTY,
o.PJ,
o.DATE,
o.QTY,
o.QTY_REC,
TranQty = t.QTY,
tranDate = t.DATE
}
)
group x by
new
{
x.MESC,
x.LINE_NO,
x.UNIT_LINE,
x.Description,
x.NEW_QTY,
x.PJ,
x.DATE,
x.QTY,
x.QTY_REC
}
into g
select new
{
QTY_Consum_1 = g.Where(c => int.Parse(c.tranDate) >= cuDate && int.Parse(c.tranDate) <= endDate).Sum(d => int.Parse(d.TranQty))
}
).ToList();
Description De L'Erreur:
LINQ to entities ne reconnaît pas la méthode 'Int32
Parse(System.String)', et cette méthode ne peut pas être traduit
dans un magasin d'expression
Comment puis-je résoudre ce problème et d'écrire ce code mieux que cela?
j'ai modifier le code pour cette
select new
{
QTY_Consum_1 = g.Where(c => SqlFunctions.StringConvert(c.tranDate) >= cuDate && SqlFunctions.StringConvert(c.tranDate) <= endDate).Sum(d => SqlFunctions.StringConvert(d.TranQty)),
g.Key.MESC
}
).ToList();
mais cette erreur
Peut-être que cette réponse va vous aider: Convertir un string en int en EF 4.0
OriginalL'auteur Pouya | 2012-08-25
Vous devez vous connecter pour publier un commentaire.
EF 5:
Au lieu de
int.Pasrse
utilisationConvert.ToInt32
. Entity Framework va générer bonCAST
fonctions en SQL.EF 6:
Réponse courte:
Réponse longue:
en EF 6, vous devez convertir la valeur numérique de la chaîne avec SqlFunctions.StringConvert. mais il a un problème. Il va ajouter des espaces inutiles pour la suite. de sorte que la comparaison échoue. C'est pourquoi j'ai mis
Trim()
. Je l'ai testé avec EF 6.1.1.Voir mon edit.
La question est à propos de l'analyse de la chaîne de int, et non vice versa.
OriginalL'auteur Mahmoodvcs
Entity Framework ne peut pas traduire ce type de conversion en SQL.
Est-il possible que vous pourriez modifier votre structure de données pour utiliser les bons types de données tels que réelle
DateTime
types? Pour les grands volumes de données telles conversions qui affectera les performances.Je vous conseille de changer votre modèle de données types d'éviter ces conversions, ou si la quantité de données sera toujours petit, puis obtenir les données de la première, et plus tard l'utilisation de Linq to Objects.
OriginalL'auteur Pablo Romeo
Remplacer tous vos
int.Parse
parSqlFunctions.StringConvert(variable)
. Il n'y a pas de fonction pour convertir String en Int. Vous devriez essayer de faire l'inverse et de convertir vos Int en String avec StringConvert.La SqlFunctions des services publics seront en mesure de traduire la commande dans la commande SQL.
- je changer de type int.analyser à SqlFunctions.StringConvert(variable) mais j'obtiens l'erreur, j'ai éditer la question. s'il vous plaît aider moi. merci
Ce type est tranDate?
vous avez raison. J'ai raté ça! Mais il ne semble avoir une fonction pour convertir string en int. Pour l'instant, je voudrais inverse de la clause par la conversion de votre Int en String avec StringConvert
La base de données ne m'appartiennent pas Et je ne peut exécuter des requêtes sur elle je suis.
OriginalL'auteur Alexandre Jobin
Dans votre clause where, vous ne pouvez pas appeler
int.Parse
. Entity Framework ne sais pas comment convertir SQL. Envisager la révision de votreWhere
.OriginalL'auteur Daniel A. White
Vous ne pouvez pas utiliser int.analyser dans
where
. Vous pouvez réécrire votre requête comme ceci:Appel
.ToList()
méthode, puis utilisezint.Parse(variable)
.Avoir une belle journée.
Mieux utiliser
AsEnumerable
pour éviter de créer l'intermédiaire de la liste.OriginalL'auteur Pouya
Quand vous en avez besoin pour vous assurer un CLR méthode peut être utilisée dans LINQ to entities vous feriez mieux de consulter cette source: https://msdn.microsoft.com/en-us/library/vstudio/dd456828(v=vs. 100).aspx.
Pas une lecture rapide, il faudra du temps, mais voici la réponse à votre question (et beaucoup plus).
OriginalL'auteur Alexander Christov
Il y a un mal construits, la base de données, je ne peux pas modifier, mais à l'utiliser.
- Je utiliser Linq-to-Sql et ça fonctionne.
Premier casting de la chaîne d'objet, puis de le convertir en int.
OriginalL'auteur Yasin Kilicdere