Gå til indholdet

N292 LINQ (objekter)

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

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 },
            new Faktura{ Dato = new DateTime(2021,3,15), Nummer = 5, Kunde = "Pia", Region = "Jylland", Salg = 200 },
            new Faktura{ Dato = new DateTime(2021,4,20), Nummer = 6, Kunde = "Bo", Region = "Sjælland", Salg = 250 },
            new Faktura{ Dato = new DateTime(2021,5,10), Nummer = 7, Kunde = "Lars", Region = "Fyn", Salg = 400 },
            new Faktura{ Dato = new DateTime(2021,6,5), Nummer = 8, Kunde = "Hanne", Region = "Jylland", Salg = 350 },
            new Faktura{ Dato = new DateTime(2021,7,1), Nummer = 9, Kunde = "Marie", Region = "Sjælland", Salg = 500 },
            new Faktura{ Dato = new DateTime(2021,8,12), Nummer = 10, Kunde = "Søren", Region = "Fyn", Salg = 600 },
            new Faktura{ Dato = new DateTime(2021,9,3), Nummer = 11, Kunde = "Niels", Region = "Jylland", Salg = 450 },
            new Faktura{ Dato = new DateTime(2021,10,15), Nummer = 12, Kunde = "Eva", Region = "Sjælland", Salg = 550 },
            new Faktura{ Dato = new DateTime(2021,11,22), Nummer = 13, Kunde = "Ole", Region = "Fyn", Salg = 700 },
            new Faktura{ Dato = new DateTime(2021,12,18), Nummer = 14, Kunde = "Kurt", Region = "Jylland", Salg = 800 },
            new Faktura{ Dato = new DateTime(2022,1,10), Nummer = 15, Kunde = "Bente", Region = "Sjælland", Salg = 650 },
            new Faktura{ Dato = new DateTime(2022,2,5), Nummer = 16, Kunde = "Lene", Region = "Fyn", Salg = 750 },
            new Faktura{ Dato = new DateTime(2022,3,12), Nummer = 17, Kunde = "Henrik", Region = "Jylland", Salg = 850 },
            new Faktura{ Dato = new DateTime(2022,4,20), Nummer = 18, Kunde = "Grethe", Region = "Sjælland", Salg = 900 },
            new Faktura{ Dato = new DateTime(2022,5,30), Nummer = 19, Kunde = "Birgit", Region = "Fyn", Salg = 950 },
            new Faktura{ Dato = new DateTime(2022,6,15), Nummer = 20, Kunde = "Per", Region = "Jylland", Salg = 1000 },
            new Faktura{ Dato = new DateTime(2022,7,10), Nummer = 21, Kunde = "Thomas", Region = "Sjælland", Salg = 1100 },
            new Faktura{ Dato = new DateTime(2022,8,5), Nummer = 22, Kunde = "Anita", Region = "Fyn", Salg = 1200 },
            new Faktura{ Dato = new DateTime(2022,9,1), Nummer = 23, Kunde = "Helge", Region = "Jylland", Salg = 1300 },
            new Faktura{ Dato = new DateTime(2022,10,15), Nummer = 24, Kunde = "Inge", Region = "Sjælland", Salg = 1400 }
        };
        return lst;
    }

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

Brug den statiske metode HentFakturaer til at hente test data:

var fakturaer = Faktura.HentFakturaer();

Brug nu LINQ til følgende:

  • Udskriv alle (bemærk at ToString er overskrevet i klassen - den kan du bruge til udskrift. Se løsning)
  • Udskriv alle sorteret efter kunde
  • Udskriv alle sorteret efter dato
  • Udskriv alle på Fyn sorteret efter dato
  • Udskriv antal på Fyn
  • Udskriv samlet salg
  • Udskriv samlet salg på Fyn
Klik for at se et forslag til en løsning
using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var fakturaer = Faktura.HentFakturaer();

            // Vis alle
            fakturaer.ForEach(f => Console.WriteLine(f));

            // Sorteret efter kunde
            Console.WriteLine();
            fakturaer.OrderBy(f => f.Kunde).ToList().ForEach(f => Console.WriteLine(f));

            // Sorteret efter dato
            Console.WriteLine();
            fakturaer.OrderBy(f => f.Dato).ToList().ForEach(f => Console.WriteLine(f));

            // Kun Fyn sorteret efter dato
            Console.WriteLine();
            fakturaer.Where(f => f.Region == "Fyn").OrderBy(f => f.Dato).ToList().ForEach(f => Console.WriteLine(f));

            // Antal på Fyn
            Console.WriteLine();
            Console.WriteLine(fakturaer.Count(f => f.Region == "Fyn"));

            // Samlet salg
            Console.WriteLine();
            Console.WriteLine(fakturaer.Sum(f => f.Salg).ToString("N2"));

            // Samlet salg på Fyn
            Console.WriteLine();
            Console.WriteLine(fakturaer.Where(i => i.Region == "Fyn").Sum(f => f.Salg).ToString("N2"));

        }
    }

    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})";
        }

    }
}