LINQ for Objekter med C#
|
|
- Bente Danielsen
- 5 år siden
- Visninger:
Transkript
1 Denne guide er oprindeligt udgivet på Eksperten.dk LINQ for Objekter med C# LINQ er den store nye teknologi med.net 3.5. Der er i virkeligheden tale om en familie af teknologier som deler et fælles fundament - LINQ for Objekter. Artiklen gennemgår bl.a. alle de mange LINQ operatorer med eksempler. Skrevet den 06. Feb 2009 af nielle I kategorien Programmering / C# Indledning LINQ er en forkortelse af Language INtegrated Query. Altså noget med at skrive forespørgelser eller søgninger (querys) direkte som en del af programmeringssprogets syntaks. Det er indført med den nyligt udgivne.net 3.5. Sproget er her f.eks. C# eller VB.NET. Artiklens eksempler er skrevet i C#, men syntaksen ligner meget den du finder i VB.NET. I virkeligheden er LINQ en familie af teknologier som baserer sig på et fælles fundament: LINQ for Objekter, LINQ for DataSet, LINQ for SQL og LINQ for XML. Det er endda muligt at udvide med sin egen LINQ for Noget - hvis man har en passende "Noget" at gøre det for :^) LINQ for Objekter, som denne artikel altså handler om, er på mange måder lig med det omtalte fælles fundament. De andre LINQ teknologier tilføjer så "blot" nye elementer til fundamentet. En stor del af fundamentet består af de såkaldte LINQ operatorer og de vil derfor dominere artiklens sidste 3/4-del. Helt basalt set drejer LINQ sig om at løbe igennem, søge i og generelt at manipulere med sekvenser af "et eller andet". I LINQ for Objekter handler det om arrays og f.eks. i LINQ for SQL handler det om rækker fra en eller flere tabeller i en database. I det følgende vil jeg bruge ordet sekvens om "et eller andet" som har en indbygget naturlig rækkefølge. Det kunne være et array som gennemløbes et element ad gangen, det kunne være en streng som gennemløbes bogstav for bogstav, en tabel i et DataSet, en List<type>, en ArrayList, en tabel i en database eller noget helt syvende. v. 1.0: 26/02/ Første version. Davs LINQ Lad mig lægge ud med et eksempel: using System; using System.Collections.Generic; using System.Linq; namespace LinqToObjects class Program
2 static void Main(string[] args) string[] landarr = "Danmark", "Sverige", "Norge", "Island", "Finland", "Tyskland" ; "land" IEnumerable<string> landquery = landarr.where(l => l.endswith("land")) // Kun lande som slutter med.orderby(l => l); // Sorteret i stigende alfabetisk orden. foreach (string land in landquery) Console.WriteLine(land); Resultat: Finland, Island og Tyskland. Den centrale stump kode er dette: IEnumerable<string> landquery = landarr.where(l => l.endswith("land")).orderby(l => l); Koden er delt over flere linjer for at gøre det mere tydeligt hvad der egentlig foregår (det er typisk at LINQ eksempler vises på den måde :^). Samlet på én linje er det: IEnumerable<string> landquery = landarr.where(l => l.endswith("land")).orderby(l => l); Selve skrivemåden kaldes for extension method syntax (eller lambda query syntax) fordi der er gjort brug af extension metoder og lambda udtryk. Men mere om det lige om lidt. Alternativt kan der skrives i query comprehension syntax, som ser sådan ud: IEnumerable<string> landquery = from l in landarr where l.endswith("land") // Kun lande som... orderby l // Sorteret i stigende alfabetisk orden. select l;
3 Man kan på ingen måder sige at den ene syntaks er at foretrække frem for den anden. Extension method syntax er måske lidt voluminøs når eksemplerne bare bliver en smule mere kompliceret, men den har til gengæld også en hel del metoder, som ikke er til stede i query comprehension syntax. Omvendt er query comprehension syntax mere kompakt, generelt lettere at læse og man ser desuden tydeligt hvordan den er inspireret af SQL. Heldigvis udelukker de ikke hinanden, og man kan endda kombinere dem i noget vi kunne kalde for mikset syntaks: 2 ; int[] nogletal = 1, 7, 3, 9, 4, 7, 4, 8, 7, 43, 32, 9, 0, 0, 34, IEnumerable<int> query = (from t in nogletal where t < 20 orderby t select t).distinct(); foreach (int tal in query) Console.WriteLine(tal); Resultat: 0, 1, 2, 3, 4, 7, 8 og 9. Lambda udtryk I Where()-leddet fra før, så vi denne dims: l => l.endswith("land") Dette kaldes for et lambda udtryk (engelsk: lambda expression) og er indført med C# 3.0. Den primære grund var faktisk netop at bane vejen for LINQ. Hvordan skal dimsen læses? Where() forventer i dette tilfælde at man levere et string-objekt (navnet på et land) og at der returneres en boolsk værdi (om det ender på "land" eller ej). Man kan udspecificere dette ved at sige at den kræver en delegate med følgende signatur: delegate bool EnderPåLandDelegate(string l); Indførelsen af de anonyme metoder i C# 2.0 var egentlig blot et mellemstadie til indførelsen af lambda udtrykkene: C# Navngivne metoder: En delegate (f.eks. en event-handler) skulle i C# 1.0 assignes med en metode man havde oprettet et andet sted i koden: EnderPåLandDelegate c1 =
4 EnderPåLand; static public bool EnderPåLand(string l) return l.endswith("land"); Dette var lidt omstændigt - specielt hvis funktionen faktisk kun skulle bruges til det ene formål. Derfor de anonyme udtryk med C# 2.0: C# Anonyme metoder: Med indførelsen af anonyme metoder kunne man i stedet definere metoden i samme linje hvor den assignes til delegaten: EnderPåLandDelegate c2 = delegate(string l) return l.endswith("land"); ; C# Lambda udtryk: Med lambda udtryk er syntaksen blevet gjort endnu mere kompakt: EnderPåLandDelegate c3 = (string l) => l.endswith("land"); eller blot: DanskSprogetFilmDelegate c3 = l => l.endswith("land"); idet C# slutter sig til typen af argumentet, l (for land), via sammenhængen som den bruges i. Extension metoder Extension metoder er en anden ny ting med.net 3.5. De gør det muligt at udvide en eksisterende type med metoder som den ikke har i forvejen - og det helt uden at man behøver at lave den om. De implementeres som statiske metoder i en statisk hjælpe-klasse. Her er et eksempel som laver et relativ simpelt primtalstjek: static class NumberTheory public static bool IsPrime(this int tal) // Læg mærke til "this" if (tal < 2) return false;
5 for (int divisor = 2; divisor <= Math.Sqrt(tal); divisor++) if (tal % divisor == 0) return false; return true; Med denne på plads kan man skrive: int t = 3; Console.WriteLine("Tallet 0 er et primtal: 1", t, NumberTheory.IsPrime(t)); eller blot (og netop dét er så det nye): Console.WriteLine("Tallet 0 er et primtal: 1", t, t.isprime()); Og det er ikke en gang nødvendigt at angive typen siden at C# kan slutte sig til den ud fra sammenhængen: Console.WriteLine("Tallet 0 er et primtal: 1", 4, 4.IsPrime()); Med denne på plads, kan vi filtrere på en talserie for primtal: int[] tal = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; IEnumerable<int> primtal = tal.where(t => t.isprime()); foreach (int t in primtal) Console.WriteLine(t); Resultat: 2, 3, 5 og 7. En lidt mere avanceret måde at opnå det samme er ved at tilføje følgende til NumberTheory-klassen:
6 public static IEnumerable<int> PrimeFilter(this IEnumerable<int> talserie) foreach (int tal in talserie) if (tal.isprime()) yield return tal; Vi kan så skrive: IEnumerable<int> primtal = tal.primefilter(); foreach (int t in primtal) Console.WriteLine(t); LINQ operatorerne fra ovenfor, While() og OrderBy(), er i virkeligheden implementeret som extension metoder på nogenlunde denne facon. LINQ operatorer While() og OrderBy() er kun et par af de rimeligt mange LINQ operatorer der findes. I det følgende vil jeg beskrive de enkelte funktioner og hvordan man bruger dem. Eksemplerne er primært i extension method syntax, men i de tilfælde hvor at det er muligt at gøre det tilsvarende i query comprehension syntax er denne også angivet. Eksemplerne er med vilje holdt meget simple. Koden forsøger ikke at være genial eller blot snedig, men det skal den heller ikke være: Formålet er at demonstrere principperne. Operatorerne er opdelt i grupper sammen med andre funktioner af samme grundlæggende type. Restriktion / Filtrering Operatorer: Where, Take, TakeWhile, Skip, SkipWhile og Distinct. Disse operatorer udvælger de elementer fra sekvensen som fortsat skal være med. Where(betingelse): Udvælger alle de elementer som opfylder betingelsen. IEnumerable<string> landequery1 = landearr.where(l => l.contains("an"));
7 IEnumerable<string> landequery2 = from l in landearr where l.contains("an") select l; Resultat: Danmark, Island, Finland og Tyskland. Take(n): Udvælger de n første elementer af sekvensen og skipper resten. IEnumerable<string> landequery1 = landearr.take(2); //... findes ikke... Resultat: Danmark og Sverige. TakeWhile(betingelse): Tager elementerne indtil at betingelsen er falsk første gang. Skipper resten. IEnumerable<string> landequery1 = landearr.takewhile(l => l.length > 5); //... findes ikke... Resultat Danmark og Sverige. Skip(n): Springer over de første n elementer fra sekvensen, og beholder resten. IEnumerable<string> landequery1 = landearr.skip(4); //... findes ikke... Resultat: Finland og Tyskland. SkipWhile(betingelse): Springer over sekvensens elementer indtil at betingelsen er falsk første gang.
8 IEnumerable<string> landequery1 = landearr.skipwhile(l => l.length > 5); //... findes ikke... Resultat: Norge, Island, Finland og Tyskland. Distinct(): Fjerner dubletter fra sekvensen. "Island"; string[] landearr = "Danmark", "Sverige", "Norge", "Island", "Finland", "Tyskland", "Sverige", IEnumerable<string> landequery1 = landearr.distinct(); //... findes ikke... Resultat: Danmark, Sverige, Norge, Island, Finland og Tyskland. Projektering Operatorer: Select og SelectMany. Disse operatorer oversætter det fremsøgte fra en form til en anden. Select(oversætter): IEnumerable<string> landequery1 = landearr.select(l => l.toupper()); IEnumerable<string> landequery2 = from l in landearr select l.toupper(); Resultat: DANMARK, SVERIGE, NORGE, ISLAND, FINLAND og TYSKLAND. Et udtryk skrevet i query comprehension syntax skal altid startes med et from-led og afsluttes med et select-led. Der er dog intet i vejen for at bruge den trivielle select:
9 select l; En Select() vil altid være af formen et-element-ind-et-element-ud. SelectMany(oversætter): Hvor Select() altså er 1-til-1 så er SelectMany() 1-til-mange. char[] splitter = 'a' ; IEnumerable<string> landequery1 = landearr.selectmany(l => l.split(splitter)); IEnumerable<string> landequery2 = from l in landearr from ls in l.split(splitter) select ls; Resultat: D, nm, rk, Sverige, Norge, Isl, nd, Finl, nd, Tyskl og nd. Joining Operatorer: Join og GroupJoin. Før koden, må vi lige have noget passende data som vi kan joine på. Først et par structs som definerer hvordan data ser ud: struct PokerSpiller public readonly int id; public readonly string fornavn; public readonly string efternavn; public PokerSpiller(int id, string fornavn, string efternavn) this.id = id; this.fornavn = fornavn; this.efternavn = efternavn; struct PokerRunde public readonly int spillerid; public readonly float gevinst;
10 public PokerRunde(int spillerid, float gevinst) this.spillerid = spillerid; this.gevinst = gevinst; Derefter data for et "typisk" spil poker: PokerSpiller[] spillere = "Hickok"), "McCall"), "Cannary-Burke") ; new PokerSpiller(1, "James Butler", new PokerSpiller(2, "Jack", new PokerSpiller(3, "Martha Jane", PokerRunde[] runder = ; new PokerRunde(1, 200), new PokerRunde(2, 15), new PokerRunde(2, 135), new PokerRunde(1, 355), new PokerRunde(1, 502), new PokerRunde(13, 2) Læg mærke til at spilleren "Martha Jane" ikke har vundet noget, samt at der er en ukendt spiller med id 13. Der er i øvrigt heller ikke taget højde for at der er nogen som jo må have tabt. Join(): Denne operator parrer de to sekvenser på de elementer der er med i begge sekvenser. Det er det der kaldes for en INNER JOIN i SQL. sekvens". værdier. IEnumerable stat = spillere.join( // Første sekvens - "den indre runder, // Anden sekvens - "den ydre sekvens". s => s.id, r => r.spillerid, // Der joines på disse to (s, r) => new s.efternavn, r.gevinst // Resultatet. ); foreach (var post in stat) Console.WriteLine(post); Resultat:
11 efternavn = Hickok, gevinst = 200 efternavn = Hickok, gevinst = 355 efternavn = Hickok, gevinst = 502 efternavn = McCall, gevinst = 15 efternavn = McCall, gevinst = 135 Det lille "var" der sneg sig ind i eksemplet er et tilfælde af en anonym variabel. C# 3.0 tillader at man bruger var i stedet for at skulle definere klasser specielt til at tage imod mellemresultater. Var'en er dog stadig typestærk, og C# ved i dette tilfælde at den indeholder et string-felt som hedder "efternavn" og et float-felt som hedder "gevinst". Visse steder kan brugen af "var" simplificere koden og gøre den nemmere at læse. Generelt bør man dog forsøge at skrive "pæn" kode og ikke lade alt for meget være underforstået på denne måde. Var kan kun bruges for lokale variable - den kan f.eks. ikke bruges som returtype for en funktion. Samme eksempel, men denne gang i query comprehension syntax: IEnumerable stat = from s in spillere join r in runder on s.id equals r.spillerid select new s.efternavn, r.gevinst ; Personligt synes jeg at denne form er nemmere at læse. I modsætning til i SQL, hvor at det er ligegyldigt hvad der er på den ene og den anden side af "on" i join'en, så kan rækkefølgen ikke byttes om i LINQ. Det skal skrives på formen: IEnumerable query = from y in ydreseq join i in indreseq on y.aaa equals i.bbb select new y.aaa, y.bbb, i.ccc ; Jeg har ikke helt gennemskuet hvorfor at man kalder det for hhv. inner sequence og outer sequence i LINQ. Men det er for så vidt også lige meget. Det vigtigste er at man er klar over at der skelnes skarpt mellem de sekvenser der er på den ene side og på den anden side af en join. Martha Jane kommer slet ikke med og det er fordi at Join() fungere som en INNER JOIN - da hendes spillerid ikke optræder i listen over runder, bliver hun ikke nævnt. Ønsker man at have hende med alligevel, skal man have fat i GroupJoin() - denne svare til en LEFT OUTER JOIN: GroupJoin(): Denne operator parrer og gruppere de to sekvenser. For hvert element i den første sekvens (den ydre) dannes der en gruppe over de resultater i den anden sekvens (den indre). sekvens". var stat = spillere.groupjoin( // Første sekvens - "den indre runder, // Anden sekvens - "den ydre sekvens".
12 værdier. s => s.id, r => r.spillerid, // Der joines på disse to (s, rundegrp) => new s.efternavn, rundegrp // Resultatet. ); var stat = from s in spillere join r in runder on s.id equals r.spillerid into rundegrp select new s.efternavn, rundegrp ; // Udskrivning foreach (var post in stat) Console.WriteLine(post.efterNavn); foreach (PokerRunde runde in post.rundegrp) Console.WriteLine("\t" + runde.gevinst); Resultat: Hickok McCall Cannary-Burke Ordning / Sortering Operatorer: OrderBy, OrderByDecending, ThenBy, ThenByDecending og Reverse. Disse operatorer ordner sekvensen ifølge den valgte sorterings-funktion. OrderBy(sortering): Sortere sekvensens elementer i stigende orden efter sorterings-funktionen. IEnumerable<string> landequery1 = landearr.orderby(l => l.length); IEnumerable<string> landequery2 = from l in landearr orderby l.length select l;
13 Resultat: Norge, Island, Danmark, Sverige, Finland og Tyskland. OrderByDecending(sortering): Sortere sekvensen i faldende orden efter sorterings-funktioen. IEnumerable<string> landequery1 = landearr.orderbydescending(l => l.length); IEnumerable<string> landequery2 = from l in landearr orderby l.length descending select l; Resultat: Tyskland, Danmark, Sverige, Finland, Island og Norge. Man kan vælge at tilføje et "ascending" i OrderBy() eksemplet. Imidlertid er det default opførelse at der skal sorteres i stigende orden så det er normalt ikke nødvendigt. Af samme årsag er "decending" obligatorisk hvis sorteringen skal være faldende i stedet for stigende. ThenBy(sekundær sortering): Denne skal altid bruges sammen med OrderBy() eller OrderByDecending(). Den angiver en sekundær sortering efter at der er sorteret for første gang: IEnumerable<string> landequery1 = landearr.orderby(l => l.length) // Sorter efter længde....thenby(l => l); //...dernæst alfabetisk IEnumerable<string> landequery2 = from l in landearr orderby l.length, l select l; Resultat: Norge, Island, Danmark, Finland, Sverige og Tyskland. ThenByDecending(sekundær sortering): fungere på samme måde, blot efter faldende sortering. Reverse(): Sortere sekvensen i modsat rækkefølge. IEnumerable<string> landequery1 = landearr.reverse(); //... findes ikke...
14 Resultat: Tyskland, Finland, Island, Norge, Sverige og Danmark. Gruppering Operator: GroupBy (det er den eneste i denne gruppe - GroupJoin() hører ikke med her). GroupBy(gruppering): Denne grupperer sekvensens elementer i 1 eller flere grupper; en gruppe for hver mulig værdi af grupperings-funktionen. IEnumerable<IGrouping<int, string>> landequery1 = landearr.groupby(l => l.length); landearr l.length; IEnumerable<IGrouping<int, string>> landequery2 = from l in group l by foreach (IGrouping<int, string> group in landequery1) Console.WriteLine("Lande med 0 bogstaver:", group.key); foreach (string land in group) Console.WriteLine("\t0", land); Resultat: Lande med 7 bogstaver: Danmark Sverige Finland Lande med 5 bogstaver: Norge Lande med 6 bogstaver: Island Lande med 8 bogstaver: Tyskland Og i stigende rækkefølge: IEnumerable<IGrouping<int, string>> landequery1 = landearr.orderby(l => l.length).groupby(l => l.length); IEnumerable<IGrouping<int, string>> landequery2 = from l in
15 landearr l.length; orderby l.length group l by Mængder (engelsk: set) Operatorer: Concat, Union, Intersect og Except. Disse operatorer tager to sekvenser og kombinere dem f.eks. til deres fællesmængde. Concat(sekvens #2): Kombinere sekvens #1 med sekvens#2. Eventuelle dubletter beholdes. int[] primtal = 2, 3, 5, 7, 11, 13, 17, 19, 23 ; int[] fibonacci = 1, 1, 2, 3, 5, 8, 13, 21 ; IEnumerable<int> query = primtal.concat(fibonacci); foreach (int tal in query) Console.WriteLine(tal); Resultat: 2, 3, 5, 7, 11, 13, 17, 19, 23, 1, 1, 2, 3, 5, 8, 13 og 21. Union(sekvens #2): Kombinere sekvens #1 og #2 til deres foreningsmængde. Eventuelle dubletter smides væk. IEnumerable<int> query = primtal.union(fibonacci); foreach (int tal in query) Console.WriteLine(tal); Resultat: 2, 3, 5, 7, 11, 13, 17, 19, 23, 1, 8 og 21. Intersect(sekvens #2): Tager fællesmængden af de to sekvenser. Beholder udelukkende de elementer som er med i begge sekvenser. IEnumerable<int> query = primtal.intersect(fibonacci); foreach (int tal in query) Console.WriteLine(tal); Resultat: 2, 3, 5 og 13. Except(sekvens #2): Beholder de elementer i sekvens #1 som ikke er til stede i sekvens #2. Kaldes for deres komplementærmængde.
16 IEnumerable<int> query = primtal.except(fibonacci); foreach (int tal in query) Console.WriteLine(tal); Resultat: 7, 11, 17, 19 og 23. Man kunne mene at Empty() operatoren, som behandles til sidst i denne artikel, faktisk burde være inkluderet i blandt mængde-operatorerne. Men det er den traditionelt ikke.. Konvertering Operatorer: OfType, Cast, ToArray, ToList, ToDictionary, ToLookup, AsEnumerable og AsQueryable. Disse operatorer ændrer sekvensens elementer fra en type til en anden. OfType<type>: Acceptere en ikke-typet sekvens og konvertere den til en typet sekvens. Hvis der er elementer som ikke kan castes til den ønskede type, smides de bort. ArrayList ugeneriskheld = new ArrayList(); ugeneriskheld.add(7); ugeneriskheld.add(9); ugeneriskheld.add(13); ugeneriskheld.add("sort kat"); // Ignoreres senere. IEnumerable<int> generiskheld = ugeneriskheld.oftype<int>(); foreach (int forheld in generiskheld) Console.WriteLine(forHeld); Resultat: 7, 9 og 13. Cast<type>: Som OfType() men kaster en exception ved det første element som ikke kan castes til den ønskede type. senere. ArrayList ugeneriskheld = new ArrayList(); ugeneriskheld.add(7); ugeneriskheld.add(9); ugeneriskheld.add(13); ugeneriskheld.add("sort kat"); // Resultere i en exception IEnumerable<int> generiskheld = ugeneriskheld.cast<int>(); foreach (int forheld in generiskheld) Console.WriteLine(forHeld);
17 Resultat: 7, 9, 13 og så en InvalidCastException. ToArray<type>: Konvertere sekvensen til et array af den angivne type. int[] arrayheld = ugeneriskheld.oftype<int>().toarray<int>(); foreach (int forheld in arrayheld) Console.WriteLine(forHeld); ToList<type>: Som ToArray(), men returnere i stedet en liste. List<int> listheld = ugeneriskheld.oftype<int>().tolist<int>(); foreach (int forheld in listheld) Console.WriteLine(forHeld); For beskrivelser af ToDictionary() og ToLookup() vil jeg henvise til dokumentationen. De bruges ikke direkte så tit og er måske nok mere beregnet til intern brug i LINQ motoren. AsEnumerable og AsQueryable: I eksemplerne i denne artikel er der brugt IEnumerable fordi at dette er det interface som definerer alle LINQ operatorerne. Bevæger man sig over i LINQ for SQL bruges der imidlertid IQueryable. Denne arver fra IEnumerable og overstyre mange af metoderne i denne - dvs. at LINQ operatorerne kan opføre sig en smule anderledes alt efter om sekvensen er af er den ene eller anden type. AsEnumerable og AsQueryable bruges til at caste frem og tilbage mellem de to - for dermed at tvinge LINQ motoren til at bruge den ene eller anden variant. Element-operatorer Operatorer: First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault, ElementAt, ElementAtOrDefault og DefaultIfEmpty. Disse operatorer udvælger et enkelt element fra sekvensen. Hvis der ikke er noget element som opfylder kriteriet vil der normalt blive smidt en exception. Dette kan undgås ved at vælge en af Default-varianterne. Hvad der eksakt er "default" afhænger af typen. I det følgende er typen en System.Int32 (int) og der er default lig med 0. Hvis det f.eks. er en System.String ville default være null i stedet. Hvis der er mere end ét element i sekvensen som opfylder udvælgelses kriteriet vil der også blive smidt en exception. First(betingelse) og FirstOrDefault(betingelse): Udvælger det første element fra sekvensen som opfylder betingelsen.
18 int[] primtal = 2, 3, 5, 7, 11, 13, 17, 19, 23 ; exception. Console.WriteLine(primtal.First()); // 2 Console.WriteLine(primtal.First(p => p >= 10)); // 11 // Console.WriteLine(primtal.First(p => p >= 100)); - Kaster en Console.WriteLine(primtal.FirstOrDefault(p => p >= 100)); // 0 Last(betingelse) og LastOrDefault(betingelse): Som First(), men tager i stedet det sidste element fra sekvensen som opfylder betingelsen. exception. Console.WriteLine(primtal.Last()); // 23 Console.WriteLine(primtal.Last(p => p <= 10)); // 7 // Console.WriteLine(primtal.Last(p => p <= 1)); - Kaster en Console.WriteLine(primtal.LastOrDefault(p => p <= 1)); // 0 Single(betingelse) og SingleOrDefault(betingelse): Fungere egentlig som First() og Last(), men kræver at der er præcist et element som opfylder betingelsen. Console.WriteLine(primtal.Single(p => p % 2 == 0)); // 2 // Console.WriteLine(primtal.Single(p => 10 <= p && p <= 20)); - Kaster en exception. // Console.WriteLine(primtal.SingleOrDefault(p => 10 <= p && p <= 20)); - Kaster en exception. Console.WriteLine(primtal.SingleOrDefault(p => 10 <= p && p <= 12)); // 11 Console.WriteLine(primtal.SingleOrDefault(p => 8 <= p && p <= 10)); // 0 ElementAt(int): Returnere elementet ved det angivne indeks. exception. Console.WriteLine(primtal.ElementAt(5)); // 13 // Console.WriteLine(primtal.ElementAt(10)); - Kaster en Console.WriteLine(primtal.ElementAtOrDefault(10)); // 0 DefaultIfEmpty: Denne bruges til at sikre at der altid returneres et eller andet, hvis man starter med den tomme sekvens. Den er speciel nyttig i de tilfælde hvor at et mellemresultat giver en tom værdi.
19 // Til dem der ikke har vundet noget. PokerRunde defaultrunde = new PokerRunde(-1, 0); sekvens". værdier. // Extension Method Syntax var stat = spillere.groupjoin( // Første sekvens - "den indre runder, // Anden sekvens - "den ydre sekvens". s => s.id, r => r.spillerid, // Der joines på disse to (s, rundegrp) => new s.efternavn, rundegrp // Resultatet. ); foreach (var post in stat) Console.WriteLine(post.efterNavn); foreach (PokerRunde runde in post.rundegrp.defaultifempty(defaultrunde)) Console.WriteLine("\t" + runde.gevinst); Resultat: Hickok McCall Cannary-Burke 0 Aggregerings-operatore Operatorer: Count, LongCount, Min, Max, Sum, Average og Aggregate. Disse operatorer virker kun for sekvenser bestående af tal. De kan f.eks. bruges til at returnere summen af alle elementerne, eller at finde det største element. int[] primtalshuffle = 13, 23, 17, 3, 2, 11, 5, 7, 19 ; Console.WriteLine(primtalShuffle.Count()); // 9 (System.Int32) Console.WriteLine(primtalShuffle.LongCount()); // 9 (System.Int64) Console.WriteLine(primtalShuffle.Count(p => p >= 13)); // 4 Console.WriteLine(primtalShuffle.Min()); // 2 Console.WriteLine(primtalShuffle.Max()); // 23
20 Console.WriteLine(primtalShuffle.Max(p => 2 * p)); // 2*23 = 46 Console.WriteLine(primtalShuffle.Sum()); // 100 Console.WriteLine(primtalShuffle.Average()); // 11, Console.WriteLine( primtal.aggregate(1, (produkt, p) => produkt * p) // 1 * 13*23*17*...*19 = ); // Aggregate hed tidligere Fold Quantifier-operatore Operatorer: Contains, Any, All og SequenceEqual. Disse operatorer bruges til at teste om en given sekvens opfylder et ønsket kriterium. tallene Console.WriteLine(primtal.Contains(11)); // true - 11 er et at Console.WriteLine(primtal.Any(p => 10 < p && p < 12)); // true lige Console.WriteLine(primtal.All(p => p % 2 == 0)); // false - 2 er Console.WriteLine(primtal.SequenceEqual( // false primtalshuffle )); Console.WriteLine(primtal.SequenceEqual( // true primtalshuffle.orderby(p => p) )); Generator-operatorer Operatorer: Empty, Range og Repeat. Disse bruges til at oprette en sekvens. // Empty - opretter en tom sekvens: Console.WriteLine(Enumerable.Empty<int>().Count()); // 0 Console.WriteLine(Enumerable.Empty<int>() == null); // false Console.WriteLine(Enumerable.Empty<int>().SequenceEqual(new int[] )); // true
21 // Range - opretter et interval: foreach (int i in Enumerable.Range(3, 5)) Console.WriteLine(i); // 3, 4, 5, 6, 7 Console.WriteLine(Enumerable.Range(5, 3).SequenceEqual(new int[] 5, 6, 7 )); // true // Repeat: foreach (string s in Enumerable.Repeat<string>("abc", 3)) Console.WriteLine(s); // abc, abc, abc Efterord Man kan komme ret langt med LINQ uden at kende til detaljerne nedenunder motorhjelmen. Hvis man vil være ekspert skal man dog nok i bøgerne eller onlinehjælpen. Personligt vil jeg anbefale: C# 3.0 in a Nutshell O'Reilly 2007 Joseph Albahari & Ben Albahari ISBN: Specielt kapitlerne 8 som dækker LINQ generelt og 9 som dækker LINQ operatorerne..ooo. Pro LINQ Language Integrated Query in C# 2008 Apress Joseph C. Rattz, Jr. ISBN: Der er næppe noget som er værd at vide om LINQ som ikke er dækket af denne bog! Bogen indeholder masser af fornuftige kode eksempler. Han synes dog at have en forkærlighed for extension method syntax på bekostning af query comprehension syntax..ooo. 101 LINQ Samples: Eksemplerne bærer dog lidt præg af at de er skrevet før at LINQ blev endeligt frigivet med VS Kommentar af zapzone d. 22. Mar Umiddelbart ganske god artikkel. Har dog ikke nærlæst den.
22 Interesserede sjæle skulle nu tage et kig på SubSonic. Uden tvivl noget af det fedeste jeg har oplevet inden for.net... Super super nemt. Super super smart... :D :D Tjek det ud her: Jeg kan anbefalde deres web casts, for at få et hurtigt indblik i hvad det drejer sig om. Og det er altså ikke kun til Websites/web applications. Det egner sig lige så meget til winforms. Kommentar af dj-hupi d. 07. May Fin artikel, meget gennem arbejdet!
Introduktion til SQL queries
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til SQL queries Denne artikel beskriver nogle forskellige muligheder i SQL queries. Eksemplerne skulle gerne være standard SQL og virke i
Læs mereListen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:
Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra
Læs mere//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!
Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for
Læs mereParameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.
Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med
Læs mereTidligere gik denne i øvrigt under navnet DLINQ for Database LINQ, og man kan finde masse materiale om emnet under dette navn på Internettet.
Denne guide er oprindeligt udgivet på Eksperten.dk LINQ for SQL med C# LINQ for SQL er en af de nye teknologier med.net 3.5. Den gør det muligt at skrive (typesikre!) database søgninger direkte i programkoden
Læs mereHvad er Objekter - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som
Læs mereAbstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Læs mereDatabase for udviklere. Jan Lund Madsen PBS10107
Database for udviklere Jan Lund Madsen PBS10107 Indhold LINQ... 3 LINQ to SQL og Arkitektur... 3 O/R designere... 5 LINQ Den store introduktion med.net 3.5 er uden tvivl LINQ(udtales link): Language-INtegrated
Læs mereDatabase design for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Database design for begyndere Denne artikel beskriver hvordan man kommer fra ide til database design. Den stopper inden normal former. Den forudsætter
Læs mereSingleton pattern i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er
Læs mereI denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.
Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations
Læs mereAnvendelse af metoder - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur
Læs mereKontrol-strukturer i PHP
Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende
Læs mereDen forudsætter kendskab til XML og C# men ikke til brug af XML i C#.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i C# Denne artikel vil vise lidt om hvordan man kan bruge XML i C#. Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.
Læs mereAlgoritmeskabeloner: Sweep- og søgealgoritmer C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte
Læs mereKursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Læs mereSkrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET
Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til VB.NET og ADO.NET. Der findes en tilsvarende artikel
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4
DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens
Læs mereSQL for MySQL-begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk SQL for MySQL-begyndere I denne artikel vil jeg prøve at beskrive MySQL på begynderniveau. SQL står for Structured Query Language, og er et sprog til
Læs mereSingleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Læs mereSom sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste
Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),
Læs mereUndtagelseshåndtering i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide
Læs mereDen forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter
Læs mereAt klippe en streng over på det mest hensigtsmæssige sted
Denne guide er oprindeligt udgivet på Eksperten.dk At klippe en streng over på det mest hensigtsmæssige sted Formålet med denne artikel er at kaste lidt lys over, hvordan man klipper en streng over på
Læs mereRMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Læs mereThreads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter
Læs mereStudiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang
Læs mereIntroduktion til funktioner, moduler og scopes i Python
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for
Læs mereDatabase-sproget SQL. SELECT A1,, Ar FROM R1,, Rk WHERE B med. SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form
Database-sproget SQL SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form SELECT A1,, Ar FROM R1,, Rk WHERE B med attributter A1,, Ar relationer R1,, Rk betingelse B (logisk
Læs mereImport af rekursivt (parent-child) hierarki i Palo
Import af rekursivt (parent-child) hierarki i Palo Dette dokument beskriver hvordan et simpelt rekursivt (parent-child) hierarki kan importeres ind i Palo på forskellige måder via SQL og samtidig bibeholde
Læs mereRelationel Algebra og SQL
Relationel Algebra og SQL Indholdsfortegnelse Relationel Algebra og SQL...1 Indholdsfortegnelse...1 De oprindelige mængdeoperationer...2 1. UNION (foreningsmængde)...2 2. INTERSECTION (fællesmængde)...2
Læs mereDen forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.
Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i VB.NET Denne artikel vil vise lidt om hvordan man kan bruge XML i VB.NET. Den forudsætter kendskab til XML og VB.NET men ikke til brug af
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereProgrammering for begyndere Lektion 2. Opsamling mm
Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger
Læs mereHvorfor skal vi bruge objekt orienteret databaser?
OODBMS Vs. RDBMS 1 Indholdsfortegnelse Hvorfor skal vi bruge objekt orienteret databaser?... 3 OODBMS i erhvervslivet... 4 Bagsiden af medaljen... 5 OODBMS i praksis... 6 Konklusion... 8 2 Hvorfor skal
Læs merePrepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.
Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010
Læs mereBits, bit operationer, integers og floating point
Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter
Læs merePROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;
PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;
Læs mereTredjepart webservices
Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output
Læs mereDvs. at give dit program muligheden for at loade og bruge plugins som andre har lavet.
Denne guide er oprindeligt udgivet på Eksperten.dk Refleksion med.net Refleksion bruges til at undersøge klasser på runtime tidspunktet. Se hvordan du f.eks. loader en klasse fra en DLL, gennemkigger dens
Læs mereDatabase-sproget SQL. SELECT A1,, Ar FROM R1,, Rk WHERE B med. SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form
Database-sproget SQL SQL ~ SEQUEL ~ Structered English QUEry Language SQL-forespørgsel, generel form SELECT A1,, Ar FROM R1,, Rk WHERE B med attributter A1,, Ar relationer R1,, Rk betingelse B (logisk
Læs mereBemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.
Mysqli Webintegrator Når vi arbejder med server-side scripting ( i vort tilfælde PHP), har vi ofte behov for at kunne tilgå data, som vi opbevarer i en database. Det kan f.eks. dreje sig om nyhederne i
Læs mereAAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal
Læs mereDatabaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
Læs mereEksempel på en database: studenter, kurser, eksamener
Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser
Læs mereIntroduction til.net remoting i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab
Læs mereProgrammering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Martin Elsman Department of Computer Science University of Copenhagen DIKU September 27, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 September
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde
Læs mereSoftware Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Læs mereI denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.
Denne guide er oprindeligt udgivet på Eksperten.dk Afrund til helt tal I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Skrevet den 03. Feb 2009 af tjomsen I kategorien
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Læs mereJava Klasse nedarvninger
Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering
Læs mereSend fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.
Denne guide er oprindeligt udgivet på Eksperten.dk Send email fra Java Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt
Læs mereMed register_globals = On får du automatisk adgang til en række variabelnavne i dit script.
Denne guide er oprindeligt udgivet på Eksperten.dk Register Globals Off Lad os slå en ting fast med det samme - register_globals = Off er en god ting, i hvert fald set ud fra et sikkerhedsmæssigt synspunkt.
Læs mereI denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.
Denne guide er oprindeligt udgivet på Eksperten.dk Grundlæggende PHP I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.
Læs mereProgrammering i C. Lektion 4. 5. december 2008
Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )
Læs mereLoginsystem (med MySQL)
Denne guide er oprindeligt udgivet på Eksperten.dk Loginsystem (med MySQL) Dette er en guide til, hvordan man kan lave et loginsystem med php og muligvis også med sessioner og MySQL Skrevet den 02. Feb
Læs mereForelæsning Uge 2 Mandag
Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:
Læs mereEksempel: Skat i år 2000
Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)
Læs mereKursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Læs mereDerfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer
Denne guide er oprindeligt udgivet på Eksperten.dk TreeView i Access II Jeg vil i denne anden udgave af treeview føljetonen begynde på et mere brugbart eksempel med et TreeView. Vi laver en ny database
Læs mereTilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.
Denne guide er oprindeligt udgivet på Eksperten.dk Tilfældige tal Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Den forudsætter
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%
Læs merePHP Snippets. De små korte. Skrevet af Daniel Pedersen
PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk
Læs mereMySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.
Denne guide er oprindeligt udgivet på Eksperten.dk MySQL C API Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab
Læs mereclass subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.
Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer
Læs mereArrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP
Denne guide er oprindeligt udgivet på Eksperten.dk Arrays i PHP De fleste som har skrevet omfattende scripts, er før eller siden stødt på problemet med at de bliver vanskelige at overskue hvis man bruger
Læs mereUdvikling af DOTNET applikationer til MicroStation i C#
Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt
Læs mereDesign by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design
Læs mereKapitel 4 Løkker i C#
Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave
Læs mereSWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
Læs mereDelphi og Databaser for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Delphi og Databaser for begyndere Denne artikel handler om hvordan man udnytter noget af det bedste i Delphi: Dets gode muligheder for integrering med
Læs mereRegister-databasen med.net
Denne guide er oprindeligt udgivet på Eksperten.dk Register-databasen med.net Mange programmer gemmer deres konfiguration-data i register-database. Denne artikel viser hvordan du - f.eks. vha. C# - henter
Læs merePython programmering. Per Tøfting. MacFest
Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer
Læs mereMartin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox
Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...
Læs mereForelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999
sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid
Læs mereMapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni 2011. 1 8 jun 2011 MapBasic &.
MapBasic &.NET interaktion MapBasic.NET Jakob Lanstorp IT konsulent COWI Odense 23. Juni 2011 1 MapBasic &.NET interaktion Erfaring med MapBasic.NET / Visual Studio Anden programmering 2 Program Hurtig
Læs mereRatingsystem i PHP og MySQL
Denne guide er oprindeligt udgivet på Eksperten.dk Ratingsystem i PHP og MySQL Lær at lave et system til at vise rating/bedømmelse på artikler og nyheder. Skrevet den 03. Feb 2009 af virtual1ty I kategorien
Læs mereBRP Tal. Om computer-repræsentation og -manipulation. Logaritmer
BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave
Læs mereVideregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
Læs merePHP 3 UGERS FORLØB PHP, MYSQL & SQL
PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Læs mereIntroduction til.net remoting i VB.NET
Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter
Læs mereGæstebog med validering opbygget med MySQL
Denne guide er oprindeligt udgivet på Eksperten.dk Gæstebog med validering opbygget med MySQL Dette er en simpel gæstebog, som kan hjælpe folk med at lave en velfungerende gæstebog uden alt for meget arbejde.
Læs mereI mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.
Denne guide er oprindeligt udgivet på Eksperten.dk Hvem er online? Online script, som tager højde for at der kan være flere personer, som har den samme IP-adresse. Scriptet viser hvor lang tid brugeren
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:
Læs mereForelæsning Uge 6 Mandag
Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereAppelsiner, bananer og citroner
Appelsiner, bananer og citroner Af: Peter Kellberg Danmarks Statistik Sejrøgade DK-00 København Ø pke@dstdk SAS og øvrige SAS Institute Inc-produkter samt navngivne serviceydelser er registrerede varemærker
Læs mereODIN-webservice ændringer release 2010 v2.0
DOKUMENTATION OG VEJLEDNING ODIN-webservice ændringer release 2010 v2.0 Indholdsfortegnelse 1. Nye webservice metoder... 2 1.1 Anvendelse af køretøjer og personel fra fremmede beredskaber ifm. indberetning
Læs mereIndholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13
1 Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Hvad er en makro... 10 Hvad kan du bruge en makro til... 10 Hvad en makro er (Visual Basic for Applications)... 11 Det hele sker
Læs mereLøsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
Læs mereIntroduktion til SQL
Introduktion til SQL Introduktion til SQL 1. udgave, 1. oplag 2013 Copyright 2013 Libris Media A/S Forfatter: Bobby Henningsen Forlagsredaktion: Peter Wiwe og Louise Peulicke Larsen Omslag: Louise Peulicke
Læs mereGreenfoot En kort introduktion til Programmering og Objekt-Orientering
Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.
Læs mereDANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
Læs mereKoden i denne guide vil kun virke i Flash MX 2003 og MX ikke ældre versioner!
Denne guide er oprindeligt udgivet på Eksperten.dk Slideshow - Guide Denne guide gennemgår grundigt og forklarende hvordan man i Flash laver et slideshow med simpel fade-effekt med billeder hentet dynamisk.
Læs mereclass Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.
Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:
Læs mereVS 2010 og.net framework 4.0
VS 2010 og.net framework 4.0 Captator Tlf: 8620 4242 www.captator.dk Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark lykke@captator.dk Mobil: 2237 3311 maj 2010 VS 2010 og.net
Læs mere