2015-11-18 17 views
5

Ho una struttura come questa:clausola Where in LINQ in List C#

struct Test 
{ 
    string name; 
    string family; 
    public Test... 
} 

nel mio codice ho una lista di questa struct:

List<Test> testList=new List<Test>(); 

Ho un espressione LINQ come questo:

var list =testList.Select(n=>n.Name); 

ma come posso filtrare questa selezione per Famiglia della lista di test? qualcosa di simile:

var list=testList.Select(n=>n.Name).Where(f=>f.Family==""); 

questa clausola Where vale solo sui nomi dei selezionati che sono un elenco di stringhe

Delle idee come farlo?

+0

Rimuovere il 'select'. –

+1

O spostarlo dopo il 'Dove'. –

risposta

9

appena messo il Where prima della Select:

var list=testList.Where(f=>f.Family=="").Select(n=>n.Name); 

in LINQ è necessario applicare il filtro prima sporgente (a meno che il filtro si applica ai risultati della proiezione piuttosto che la collezione originale).

4

Filtro utilizzando Where prima di selezionare solo una struttura utilizzando Select. In questo modo, è ancora ottenere l'oggetto completo:

testList.Where(t => t.Family == "").Select(t => t.Name) 

Dopo tutto, Select prenderà l'oggetto e quindi passare solo su ciò che si ritorna nel lambda. In questo caso, si restituisce solo una stringa, quindi si scaricano tutte le altre informazioni dall'oggetto Test. E come tale, le informazioni che vuoi filtrare non sono più disponibili.

Se si passa che in giro, è possibile filtrare l'oggetto di prova, e poi tornare solo quella stringa.

1

Normalmente quando sto controllando per un valore vuoto del genere, userò string.IsNullOrEmpty(), per ogni evenienza.

testList.Where(f=> string.IsNullOrEmpty(f.Family)).Select(n=>n.Name); 
Problemi correlati