LINQ
List
Børre Stenseth
Moduler>LINQ>Lister

LINQ og Lister

Hva
LINQ og lister

Vi skal bruke linq til å se på noen enkle listestrukturer.

Eksempel 1

Vi lager oss en enkel console applikasjon og gjør noen eksperimenter på en array av heltall:

simplelist
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace linq5
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] T={12,45,2,9,0,-3,-5,7,8};
            var positive = from value in T
                           where value > 0
                           select value;
            show("positive",positive);
            var sorterte=from value in T
                         orderby value
                         select value;
            show("sorterte",sorterte);
            var even = from value in T
                       where value % 2 == 0
                       select value;
            show("even",even);
            Console.Read();
        }
        public static void show(String what,IEnumerable<int> tall)
        {
            String S = what+" : ";
            foreach (int i in tall)
                S += i + ",";
            Console.WriteLine(S.Substring(0,S.Length-1));
        }
    }
}

Eksempel 2

I dette eksempelet etablerer vi en liste, List <person> pList, av objekter og eksperimenterer med den. Objektene vi bruker ser slik ut:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace linq4
{
    class person
    {
        String m_name;
        String m_address;
        int m_yob;
        public person(String t)
        {
            String[] data = t.Split(',');
            m_name = data[0];
            m_address = data[1];
            m_yob = Convert.ToInt32(data[2]);
        }
        public string Name
        {
            get { return m_name; }
            set { m_name = value; }
        }
        public string Address
        {
            get { return m_address; }
            set { m_address = value; }
        }
        public int Year
        {
            get { return m_yob; }
            set { m_yob = value; }
        }
        override public String ToString()
        {
            return m_name + ":" + m_address[0] + ":" + m_yob;
        }
    }
}

og de etableres fra en enkel text ressurs data.txt, slik:

private void loadData()
{
    pList = new List<person>();
    String[] slist = Properties.Resources.data.Split('\n');
    foreach(String t in slist)
        if((t.Length <2)||(t.StartsWith("//")))
            continue;
        else
            pList.Add(new person(t));
    listBox1.Items.Clear();
    foreach (person p in pList)
        listBox1.Items.Add(p);
}

Når dette er gjort kan vi gå løs på lista med personer, pList, med linq. Her er to eksempler som fyller to listebokser med henholdsvis haldensere og sorterte mossinger:

// From Halden
private void button1_Click(object sender, EventArgs e)
{
    listBox2.Items.Clear();
    var haldensere = from p in pList
                     where p.Address.CompareTo("Halden")==0
                     select p;
    foreach (var p in haldensere)
        listBox2.Items.Add(p);
}
// from Moss, sorted
private void button2_Click(object sender, EventArgs e)
{
    listBox3.Items.Clear();
    var mossinger = from p in pList
                     where p.Address.CompareTo("Moss") == 0
                     orderby p.Name
                     select p;
    foreach (var p in mossinger)
        listBox3.Items.Add(p);
}
Referanser
  • Eksempel 1:
    https://svn.hiof.no/svn/psource/Csharpspikes/linq5
  • Eksempel 2:
    https://svn.hiof.no/svn/psource/Csharpspikes/linq4
Vedlikehold

B.Stenseth, januar 2011

(Velkommen) Moduler>LINQ>Lister (XML)