Gå til indholdet

O292 LINQ (projektering)

Start med at skabe en tom konsol applikation og tilføj følgende klasser:

class Faktura
{
    public DateTime Dato { get; set; }
    public int Nummer { get; set; }
    public string Kunde { get; set; }
    public string Region { get; set; }
    public double Salg { get; set; }

    public static List<Faktura> HentFakturaer()
    {
        List<Faktura> lst = new List<Faktura> {
            new Faktura{ Dato = new DateTime(2020,7,1), Nummer = 1, Kunde ="Jens", Region = "Fyn", Salg = 100 },
            new Faktura{ Dato = new DateTime(2020,5,1), Nummer = 2, Kunde ="Anders", Region = "Fyn", Salg = 300 },
            new Faktura{ Dato = new DateTime(2021,1,1), Nummer = 3, Kunde ="Mette", Region = "Sjælland", Salg = 150 },
            new Faktura{ Dato = new DateTime(2020,12,1), Nummer = 4, Kunde ="Hans", Region = "Jylland", Salg = 900 },
        };
        return lst;
    }

    public override string ToString()
    {
        return $"{Dato.ToShortDateString()} {Nummer} {Kunde} ({Region})";
    }
}

Brug nu LINQ til at projektere samlingen af Faktura til:

  1. En samling af MiniFaktura, som indeholder Nummer og Kunde.
class MiniFaktura
{
    public int Nummer { get; set; }
    public string Kunde { get; set; }
}
  1. En samling af anonyme objekter, som indeholder Nummer og Kunde.
  2. En samling af navngivne tuples, som indeholder Nummer og Kunde.

Brug den statiske metode HentFakturaer til at hente test data:

var fakturaer = Faktura.HentFakturaer();
Klik for at se et forslag til en løsning
var fakturaer = Faktura.HentFakturaer();

// Projektering til MiniFaktura
var miniFakturaer = fakturaer.Select(f => new MiniFaktura
{
    Nummer = f.Nummer,
    Kunde = f.Kunde
}).ToList();

Console.WriteLine("MiniFaktura:");
miniFakturaer.ForEach(mf => Console.WriteLine($"Nummer: {mf.Nummer}, Kunde: {mf.Kunde}"));

// Projektering til anonyme objekter
var objekter = fakturaer.Select(f => new { Nummer =  f.Nummer, Kunde = f.Kunde}).ToList();

Console.WriteLine("\nAnonyme objekter:");
objekter.ForEach(t => Console.WriteLine($"Nummer: {t.Nummer}, Kunde: {t.Kunde}"));


// Projektering til navngivne tuples
var tuples = fakturaer.Select(f => (Nummer: f.Nummer, Kunde: f.Kunde)).ToList();

Console.WriteLine("\nNavngivne Tuples:");
tuples.ForEach(t => Console.WriteLine($"Nummer: {t.Nummer}, Kunde: {t.Kunde}"));

class Faktura
{
    public DateTime Dato { get; set; }
    public int Nummer { get; set; }
    public string Kunde { get; set; }
    public string Region { get; set; }
    public double Salg { get; set; }

    public static List<Faktura> HentFakturaer()
    {
        List<Faktura> lst = new List<Faktura> {
                    new Faktura{ Dato = new DateTime(2020,7,1), Nummer = 1, Kunde ="Jens", Region = "Fyn", Salg = 100 },
                    new Faktura{ Dato = new DateTime(2020,5,1), Nummer = 2, Kunde ="Anders", Region = "Fyn", Salg = 300 },
                    new Faktura{ Dato = new DateTime(2021,1,1), Nummer = 3, Kunde ="Mette", Region = "Sjælland", Salg = 150 },
                    new Faktura{ Dato = new DateTime(2020,12,1), Nummer = 4, Kunde ="Hans", Region = "Jylland", Salg = 900 },
                };
        return lst;
    }

    public override string ToString()
    {
        return $"{Dato.ToShortDateString()} {Nummer} {Kunde} ({Region})";
    }
}

class MiniFaktura
{
    public int Nummer { get; set; }
    public string Kunde { get; set; }
}