2010-08-20 6 views
1

J'utilise cette requête LINQ dans une application que je vous écris:Simplification de la requête LINQ?

internal int GetNoteCount(DateTime startDate, DateTime endDate) 
{ 
    var a = DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate); 
    var b = a.Where(n => n.LastRevised <= endDate); 
    return b.Count(); 
} 

De toute évidence, la requête obtient note qui se situent entre deux dates. Je voudrais simplifier la requête en consolidant les deux premières lignes en une seule. Je sais que je peux utiliser la syntaxe courante pour ajouter l'appel de la méthode Count() à la fin de ma requête.

Voici ma question: Comment puis-je consolider les deux requêtes? Apparemment, l'opérateur & & ne fonctionne pas avec deux expressions lambda. Merci de votre aide.

Répondre

3

Vous pouvez le faire:

internal int GetNoteCount(DateTime startDate, DateTime endDate) 
{ 
    return DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate && n.LastRevised <= endDate).Count(); 
} 

Il suffit d'utiliser la && sur vos conditions, pas le lambda entière :)

+0

N'oubliez pas qu'il retourne le .Count(). –

+0

@Jacob - woops, merci et ajouté :) –

+0

Merci! Accepté et +1 –

1

Tout d'abord, il n'y a rien de mal avec le & & opérateur et il devrait fonctionner très bien .

var a = DataStore.ObjectContext.Notes.Where(n => n.LastRevised >= startDate && n.LastRevised <= endDate); 
return a.Count(); 

En second lieu, avec LINQ, il retarde la requête effectue jusqu'à ce que le .Count() donc il n'y a pas de différence fonctionnelle entre votre exemple et celui-ci.