//La clausola orderby , permette di ordinare il risultato di una query in ordine crescente e decrescente.
//Il tipo di ordine può dipendere da una o più chiavi che combinate possono ottenere diverse forme e direzioni di ordinamento.
//Nell'esempio seguente viene dichiarata una variabile Nationality che conterrà al suo interno un Nome "Cliente" , un Cognome e
//la Nazionalità.
// Esempio di query Linq
// OrderBy
// Questo esempio di query Linq mediante la clausola OrderBy verifica la nazionalità del cliente e
// dispone in ordine alfabetico crescente dalla a alla z a seconda della nazionalità.

// Richiamo NameSpace dal sistema operativo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Spazio dei nomi Linq_OrderBy_
namespace Linq_OrderBy_
{
    // Classe Program
    class Program
    {
        // Metodo Statico Main
        static void Main(string[] args)
        {
            // Richiamo metodo OrdinaCrescente
            OrdinaCrescente();
        }

        // Metodo Statico OrdinaCrescente
        public static void OrdinaCrescente()
        {
            // Matrice Nationality
            var Nationality = new[]
            {
            // Dichiarazione Cliente 1 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer1 " , Cognome = " xxxxx " , Nazionalità = " Italia "},
            // Dichiarazione Cliente 2 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer2 " , Cognome = " xxxxx " , Nazionalità = " Francia "},
            // Dichiarazione Cliente 3 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer3 " , Cognome = " xxxxx " , Nazionalità = " Usa "},
            // Dichiarazione Cliente 4 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer4 " , Cognome = " xxxxx " , Nazionalità = " Regno Unito "},
            // Dichiarazione Cliente 5 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer5 " , Cognome = " xxxxx " , Nazionalità = " Giappone "},
            // Dichiarazione Cliente 6 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer6 " , Cognome = " xxxxx " , Nazionalità = " Italia "},
            // Dichiarazione Cliente 7 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer7 " , Cognome = " xxxxx " , Nazionalità = " Spagna "},
            // Dichiarazione Cliente 8 su matrice Nationomality
            new { CustomerID = 1,Nome = " Customer8 " , Cognome = " xxxxx " , Nazionalità = " Gremania "},
            };

            // Interfaccia IEnumerable
            IEnumerable<string> countrys =
            // Ordina in ordine crescente la nazionalità della matrice Nationality,le seleziona e visualizza a utente
            Nationality.OrderBy(addr => addr.Nazionalità).Select(addr => addr.Nazionalità);
            // Carica su string name tutti i dati della nazionalità della matrice Nationality

            foreach ( string name in countrys)
            {
                // Visualizza a utente tutti i dati della Nazionalità in ordine alfabetico crescente
                Console.WriteLine(name);
            }

            // Aspetta un tasto qualsiasi da tastiera
            Console.WriteLine("");
            Console.WriteLine(" Premere un tasto per uscire ");
            Console.ReadLine();
        }
    }
}