LINQ anche per lo strato di presentazione

Quello che emerge da quanto visto al TechEd è che LINQ non è una feature di C# 3.0 che serve solo per lo strato di accesso ai dati.
Di seguito un piccolo esempio in cui LINQ semplifica di parecchio il nostro codice anche nello strato di presentazione. Prendiamo per esempio un dominio in cui ogni User appartiene ad un Group:

0:          public class User
1:          {
2:             public int ID {get;set; }
3:             public string Name {get;set; }
4:             public string Telephone { get; set; }
5:             public Group Group { get; set; }
6:          }
7:          public class Group
8:          {
9:             public string Name { get; set; }
10:         }

quindi con un mettodo LoadUsers() abbiamo una lista di IEnumerable<User> che rappresenta la fonte dei dati


0:         

private IEnumerable<User> LoadUsers()
1:          {
2:             
Group users =new Group { Name ="user" };
3:             
Group administrators = new Group { Name = "admin" };
4:             
yield return new User { ID = 1, Name = "Claudio", Group = administrators };
5:             
yield return new User { ID = 2, Name = "Emanuele", Group = administrators };
6:             
yield return new User { ID = 2, Name ="Roberto", Group = users };
7:          }

ora se volessimo filtrare la collezione di utenti per mettere in un controllo solo gli utenti che appartengono al gruppo degli admin dovremmo fare un  bel cliclo come di seguito


0:         
private void Form1_Load(object sender, EventArgs e)
1:          {
2:             
foreach (User item in model.LoadUsers())
3:             {
4:                 
if (item.Group.Name == "admin")
5:                  {
6:                      listView1.Items.Add(item.Name);
7:                  }
8:              }
9:          }
/span>

sfruttando LINQ si raggiunge lo stesso scopo con una sintassi un po' più semplice:


0:          private void Form1_Load(object sender, EventArgs e)
1:          {
2:             var query = from users in model.LoadUsers()
3:                                where users.Group.Name =="admin"
4:                                select new ListViewItem(users.Name);
5:              listView1.Items.AddRange(query.ToArray<ListViewItem>());
6:          }

 

Technorati tags: , ,