giovedì 15 marzo 2012

Anonymous Type

I tipi anonimi... verosimilmente è un argomento che ormai ha trovato parecchia letteratura sul Web, ma ogni tanto qualche esercizio fa bene.

In questo specifico caso nato più che altro da una conversazione in una breve pausa, ho voluto fare una prova.

Creare un anonimo, valorizzando un campo con linq.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AnonymousTypes
{
class user
{
public int ID_User { get; set; }
public int ID_Role { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}

class role
{
public int ID_Role { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}

class Program
{
static void Main(string[] args)
{
List<role> rs = new List<role>();
rs.Add(new role() { ID_Role = 1, Name = "Default", Description = "" });
rs.Add(new role() { ID_Role = 2, Name = "J.Dev", Description = "" });
rs.Add(new role() { ID_Role = 3, Name = "S.Dev", Description = "" });

List<user> us = new List<user>();
us.Add(new user() { ID_User = 1 ,ID_Role = 1, Name = "Fabio", Surname= "Arosio" });
us.Add(new user() { ID_User = 1, ID_Role = 2, Name = "Claudio", Surname = "Arosio" });
us.Add(new user() { ID_User = 1, ID_Role = 1, Name = "Lorenzo", Surname = "Arosio" });

var us_rs = from u in us
where u.ID_Role == 1
select new
{
User_Name = u.Name,
User_Surname = u.Surname,
Role = rs.FirstOrDefault(r => r.ID_Role == u.ID_Role).Name
};

foreach (var ur in us_rs)
{
Console.WriteLine(ur.Role + "\t" + ur.User_Name + " " + ur.User_Surname);
}

Console.ReadKey();
}
}
}


Abbandonando le considerazioni possibili sulle classi dati è decisamente interessante "fare qualche prova".

Nel caso specifico della valorizzazione del "Role" potrebbe essere interessante ottenere la stessa informazione tramite una "select" tuttavia il tipo restituito non è e non può essere un nativo.

Mai perdere il vizio ...

Nessun commento: