2010-11-04 9 views
0

Je passe un modèle de filtre à mon service. L'utilisateur peut sélectionner any qui est null ou une chaîne vide. Comment puis-je mettre en place une requête unique .Where qui sait ignorer ce filtre?Filtre LINQ spécifique ou tous

Un exemple:

public class UserFilterModel 
{ 
    public string State {get; set;}; 
    public string Age {get; set;}; 
} 

Le filtre: (? Comment puis-je mieux répondre à mes besoins)

var result = context.Users.Where(u => u.State == filter.State && u.Age == filter.Age); 

Donc, si l'utilisateur sélectionne nul ou vide pour State, cela actuellement retourne des enregistrements avec des états vides ou vides quand je veux réellement ignorer ce filtre.

En outre, j'utilise asp.net mvc 2, je suis en train de faire quelque chose de complètement faux, s'il vous plaît dites-moi. Utilisation du modèle de référentiel

Répondre

1

est ici une façon:

var result = context.Users.Where(
    u => (String.IsNullOrEmpty(filter.State) || u.State == filter.State) && 
     (String.IsNullOrEmpty(filter.Age) || u.Age == filter.Age) 
); 
+0

Qu'en est-entiers, si elle est 0, comment puis-je gérer cela? –

+0

@Shawn McLean: Vous voulez dire si vous avez une propriété (disons 'DriverLicenseNumber') et que vous voulez ignorer' DriverLicenseNumber' si 'filter.DriverLicenseNumber == 0' est' true'? Simplement '(filter.DriverLicenseNumber == 0 || u.DriverLicenseNumber == filter.DriverLicenseNumber)'. Le but est d'utiliser le court-circuit à votre avantage. – jason