2010-03-23 5 views
3

Comment ignorer les éléments vides dans LINQ requêteComment ignorer les éléments vides dans LINQ requête

J'ai une requête LINQ

  var usersInDatabase = 
      from user in licenseUserTable 
      where user.FirstName == first_name && 
      user.LastName == last_name 
      select user; 

Mais si je suis ici et prenom ou last_name est vide, je veux toujours évaluer l'autre élément de données.

Répondre

4
var usersInDatabase = 
    from user in licenseUserTable 
    where 
     (user.FirstName == first_name || first_name == string.Empty) && 
     (user.LastName == last_name || last_name == string.Empty) 
    select user; 

Maintenant, vous obtiendrez des documents qui correspondent au premier nom donné, si le prenom est vide tout correspondra aussi longtemps qu'il correspond également au nom de famille, à moins que le last_name est vide aussi. Le seul problème avec ceci maintenant est que si first_name et last_name sont vides, vous obtiendrez tout.

+0

Au lieu de prenom == string.Empty, vous utilisez peut-être aussi String.IsNullOrEmpty (prenom). –

+0

J'allais mettre cela, mais je ne crois pas que string.IsNullOrEmpty est valide dans LINQ. Il fonctionne cependant dans le cadre Entity. – David

4
var usersInDatabase = 
    from user in licenseUserTable 
    select user; 

    if (!string.IsNullOrEmpty(first_name)) { 
     usersInDatabase = usersInDatabase.Where(u => u.FirstName == first_name); 
    } 
    if (!string.IsNullOrEmpty(last_name)) { 
     usersInDatabase = usersInDatabase.Where(u => u.LastName == last_name); 
    } 
0

Telle est l'approche de style simple déclaration, mais je trouve le style de Mark beaucoup plus propre:

var usersInDatabase = 
    from user in licenseUserTable 
    where string.IsNullOrEmpty(first_name) || user.FirstName == first_name 
    where string.IsNullOrEmpty(last_name) || user.LastName == last_name 
    select user; 
Questions connexes