2016-12-14 1 views
3

Je suis en train de créer une requête LINQ clause where est une variable construite en fonction des choix de l'utilisateurC# LINQ clause where

if (!string.IsNullOrEmpty(txbbox.Text)) 
{ 

    query = "s.date== DateTime.Parse(txbbox.Text)"; 
} 

if (!string.IsNullOrEmpty(txbbox.Text)) 
{ 
    query = query + " & (s.type.Contains(txbbox.Text))"; 
} 

il y a un moyen de passer la variable construite dans la clause where dans une requête LINQ ?

Stemp = (from s in SList 
       where ***query*** 
       orderby s.DataScadenza 
       select s).ToList(); 
+1

@HimBromBeere il n'y a pas besoin d'utiliser des chaînes ici, donc je ne pense pas que cela s'applique –

+0

Note: vous lisez de la même zone de texte deux fois et appliquer des tests complètement incompatibles. .. c'est presque certainement un bug –

Répondre

6

Oui; assez simple dans ce cas, en fait:

IEnumerable<Whatever> query = SList; // avoid var here, as will impact later assignment 
    if (!string.IsNullOrEmpty(txbbox.Text)) 
    { 
     var when = DateTime.Parse(txbbox.Text); // to avoid parsing per item 
     query = query.Where(s => s.date == when); 
    } 
    if (!string.IsNullOrEmpty(txbbox.Text)) 
    { 
     query = query.Where(s => s.type.Contains(txbbox.Text)); 
    } 
    Stemp = query.OrderBy(s => s.DateScadenze).ToList();