Question

J'ai une base de données avec un champ de quantité - c'est un nombre décimal, bien que le schéma de base de données a la colonne définie comme une chaîne. Je veux être en mesure d'exécuter une requête Linq pour trouver des valeurs basées sur un nombre pour le montant.

Il y a des questions comme cette et this qui parlent en utilisant la méthode CompareTo, mais ne fonctionne pas dans cette situation. Par exemple, je les montants de factures suivantes dans la base de données:

556
130
1450
410

le code suivant:

from t in test
where t.BillAmount.CompareTo("50") > 0
select t

retournera valeur 556 mais aucune des autres valeurs, même si elles sont toutes supérieures à la valeur décimale de 50 ans.

Modification de la ligne où à:

    where t.BillAmount.CompareTo("50") < 0

retournera 130, 1450 et 1450 que ceux sont « moins », puis 50 comme une chaîne, mais pas comme un nombre.

Je ne suis pas en utilisant le cadre de l'entité, donc je ne peux pas faire quelque chose comme:

where SqlFunctions.StringConvert((double)t.BillAmount).Trim() > 50

Je ne aussi aucun contrôle sur le schéma de base de données, donc je ne peux pas changer ces valeurs. Comment puis-je comparer le champ BillAmount à un nombre et renvoyer les valeurs ci-dessus / dessous?

Était-ce utile?

La solution

You do not have to use Entity Framework to cast a String to Decimal.

You can simply use the Convert call.

var x = from t in test 
        where Convert.ToDecimal(t.BillAmount) > 50 
        select t

or with Lambda expression:

var x = test.where(p=>Convert.ToDecimal(p.BillAmount) > 50);

Autres conseils

This is a good place to use let, which will let you have a temporary variable as part of the LINQ query. Something like this should work:

from t in test
let amount = Convert.ToDecimal(t.BillAmount)
where amount > 50
select t
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top