2009-06-23 4 views
3

Voici ce que j'ai:Quelle est l'équivalence d'un objet SQL WHERE dans les expressions Lambda?

decimal sum = _myDB.Products.Sum(p => p.Price).GetValueOrDefault(); 

J'ai aussi deux dates: DateTime start, DateTime end
Je veux récupérer la somme de tous les prix des produits entre le début et la fin, mais je ne peux pas comprendre comment incorporer les variables dans l'équation lambda.

Comment incorporer des variables dans une équation lambda pour lui donner une spécification?

Répondre

11

Utilisez Enumerable.Where

decimal sum = _myDB.Products 
        .Where(p => (p.Date >= start) && (p.Date <= end)) 
        .Sum(p => p.Price) 
        .GetValueOrDefault(); 
+6

Convenu en termes de mise en œuvre, mais les requêtes de ce genre sont beaucoup plus clair sur plusieurs lignes. Alignez les points :) –

+0

Bon point sur la mise en forme - Je suis juste resté avec la méthode de formatage de sa question d'origine, par cohérence, mais c'est ainsi que je l'écris généralement dans mon propre code. –

+0

@Jon: Terminé. Vous n'avez pas vu votre commentaire jusqu'à maintenant. –

0
_myDB.Products 
.Where(p => p.start >= "somevalue") 
.Where(p => p.end <= "somevalue") 
.Sum(p => p.Price).GetValueOrDefault(); 
+0

Il n'y a pas besoin d'avoir deux clauses where avec des prédicats séparés. –

+0

Je préfère ce style car il améliore la lisibilité – Rony

1
decimal sum = _myDB.Products 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
.Sum(p => p.Price) 

ma syntaxe Pardon. Mais, j'espère que vous avez l'idée.

EDIT: Corrigé après la suggestion de Reed.
ancien code (incorrect)

decimal sum = _myDB.Products 
.Sum(p => p.Price) 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
+0

La clause Where doit précéder Sum. Sum renvoie un nombre décimal, et vous ne pouvez pas faire ".Where" sur une valeur décimale. –

+0

Les gars, cela fonctionnera-t-il différemment (c'est-à-dire différent de WHERE et de SUM)? – shahkalpesh

+1

Cela ne compilera pas du tout. Vous ne pouvez pas exécuter .Where sur une seule valeur, qui est ce qui est retourné par Sum(). –

Questions connexes