2009-11-08 9 views
0

j'ai 2 tables
  1. Le client
  2. Opérationsquestion mathématique simple avec LINQ, simple requête de jointure, les valeurs nulles, etc

opérations peut entraîner: crédits ou prélèvements automatiques ('C' ou ' D 'dans un champ char) avec les champs date et ammount.

Je dois calculer le solde pour le compte LINQ de chaque client ... Le résultat devrait également montrer l'équilibre 0 pour les clients qui n'ont pas fait encore des opérations

J'ai la fonction suivante avec la déclaration linQ, mais je sais cela pourrait être fait de façon plus rapide et plus rapide, n'est-ce pas? Qui sera?

public static double getBalance(ref ClasesDeDatosDataContext xDC, string SSN, 
int xidClient) 
{ 
    var cDebits = 
     from ops in xDC.Operations 
       where (ops.idClient == xidClient) && (ops.OperationCode == 'D') 
       select ops.Ammount; 
    var cCredits = 
       from ops in xDC.Operations 
       where (ops.idClient == xidClient) && (ops.OperationCode == 'C') 
       select ops.Ammount; 
    return (double)(cCredits.Sum() - cDebits.Sum()); 
} 

Merci !!!

Répondre

0

Je ne sais pas si le moteur LINQ to SQL peut gérer l'expression, mais quelque chose comme cela devrait être possible:

return (
    from ops in xDC.Operations 
    where ops.idClient == xidClient 
    select ops.operationCode == 'C' ? ops.Amount : -ops.Amount 
).Sum(a => a); 

Ou peut-être:

return (
    from ops in xDC.Operations 
    where ops.idClient == xidClient 
    select new { Sign = ops.operationCode == 'C' ? 1.0 : -1.0, Amount = ops.Amount } 
).Sum(o => o.Sign * o.Amount); 

Si la collection est vide, la méthode Sum renvoie zéro, ce qui prend soin des clients sans transactions.

Edit:
orthographe corrigée dans la requête: Ampont -> Montant

+0

Je reçois une exception d'exécution ... La valeur null ne peut pas être attribué à un membre de type System.Double qui est un non annulable type de valeur. – Enrique

+0

Avec lequel d'entre eux? Le champ Montant peut-il être nul? Peut-il y avoir d'autres opérations que 'C' ou 'D'? – Guffa

+0

Salut Guffa ... regardez la capture d'écran. C'est l'exception à l'exécution (quelques msgs sont en espagnol) ... http://img130.imageshack.us/i/sshot1s.jpg/ – Enrique