Svenska artiklar om programmering, ofta relaterat till webb, C# eller databaser.
Se även motsvarande lista på engelska och mina filosofiska reflektioner.
Escape-tecken: C#
2019-06-27
Det finns fyra typer av strängar-literals i C#. Vanliga strängar tillåter en mängd escape-sekvenser med \ som escape-tecken. @ används för att ange "råa" strängar, där man bara kan escapa " genom att dubblera tecknet till "". $ används för att ange interpolerade strängar, där man kan inkludera uttryck direkt i strängen, genom att omge uttrycket med {}.Escape-tecken: HTML
2019-06-27
HTML är språket som används på alla webbsidor. Det används för att representera hela dokument, och innehåller därför ofta url:er, Javascript och CSS, vilket ofta kan leda till att dubbel escapning krävs. HTML fungerar likt XML, men är mer flexibelt.Escape-tecken: SQL
2019-06-27
SQL har inga officiella standarder för hur strängar och annat ska escapas. Det enda som är standardiserat är att strängar omges med apostrofer. Därför har varje databasmotor hittat på sin egen syntax för escapning. MariaDB och MySQL Här används \ som escape-tecken, och man har tillgång till vanliga escape-sekvenser, såsom \n för radbrytning och \\ för bakvänt snedstreck.Escape-tecken: Terminal
2019-06-27
I Linux-terminaler kan strängar anges utan fnuttar, med enkelfnuttar eller med dubbelfnuttar. Strängar med enkelfnuttar är enklast: dom går inte att escapa. Både i strängar utan fnuttar och i strängar med dubbelfnuttar kan man använda variabler, vilket är en ganska komplicerad syntax.Escape-tecken: Url
2019-06-27
En url består av många olika delar, som kan escapas på olika sätt. https://www.domännamn.se/sökväg/till/fil.html?query=string#hash Domännamn Ett domännamn består av en eller flera punktseparerade delar. Varje del kan bestå av bokstäver, siffror och bindestreck. Under huven används endast a-z, 0-9 och -, så vill man t.Escape-tecken: XML
2019-06-27
XML används för att representera dokument - av många olika typer. SVG-bilder är kanske det populäraste XML-format som används på webben idag. HTML liknar XML, men det återkommer vi till i nästa post. I XML är reglerna någorlunda tydliga, om än ganska krångliga.Escape-tecken: PHP
2019-06-26
PHP är ett språk med många olika behov av escapning. Här går vi igenom några exempel. Strängar I PHP finns fyra olika av strängsyntaxer, som escapas på olika sätt: apostrof, citattecken, heredoc och nowdoc. Här beskrivs syntaxen mycket kort. Mer information hittas i PHP:s dokumentation.Escape-tecken: Javascript
2019-06-25
Escapning i Javascript liknar den i JSON, men Javascript har många fler situationer där något måste - eller kan - escapas. Strängar I Javascript kan man ange vanliga strängar antingen med citattecken (dubbelfnuttar) eller apostrofer (enkelfnuttar). Dessa fungerar likadant, förutom att man i strängar med citattecken måste escapa eventuella citattecken, men inte behöver escapa apostrofer.Escape-tecken: JSON
2019-06-16
JSON är ett enkelt dataformat. Strängar i JSON representerar Unicode-kodpunkter (precis som i språk som JavaScript, C# och Java). Dom flesta tecken går att inkludera innanför citattecknen, men dessa måste escapas: citattecken, bakvänt snedstreck och styrtecknena från U+0000 till U+001F.Entity Framework med Code first
2019-06-15
För att arbeta med databaser i C# använder man ofta Entity Framework (EF). Det är ett ORM-system (objekt-relationell mappning), som låter en skriva kod som om det vore vanliga objekt, istället för att manuellt skriva SQL-kod, exekvera den och därefter konvertera resultatet till objekt.
Enum-värdet value__
i C#
2019-06-14
Som member i en enum i C# kan man använda vilken identifier som helst. Nästan. enum Color { Yellow, Orange, Red, Magenta, value__, // <-- ERROR } Om man försöker döpa en member till value__, så får man detta felmeddelande:När behövs escape-tecken?
2019-06-13
Escape-tecken har två stora kategorier användningsfall: hårdkodat i din egen kod, och när du har fått en sträng som input som behöver användas i en särskild kontext. Din egen kod Om du behöver en sträng som innehåller ett citattecken, så kanske ditt programmeringsspråk stödjer bakvänt snedstreck som escape-tecken: "\"dubbelfnutt\" är synonym till citattecken".Escape-tecken: Introduktion
2019-06-12
Ett escape-tecken är ett tecken som ändrar betydelsen av efterföljande tecken. Dom används ofta för strängar i programmeringsspråk, men också i t.ex. en terminal eller en regex-motor. I många programmeringsspråk omger man strängar med citattecken: "en sträng". Men hur gör man om man vill ha med ett citattecken i strängen?Navigera i webbdjungeln: Säkerhet för webbplatser
2019-05-04
Webbsäkerhet är ett delområde inom datasäkerhet, vilket jag har beskrivit närmare i en egen artikelserie. Här beskrivs istället översiktligt det viktigaste för dig som skapar webbplatser. Attacker Eftersom webben är en komplex plattform, så finns många olika typer av attacker.Navigera i webbdjungeln: Dokumentation
2019-05-03
Oavsett om man är grön eller senior utvecklare, så behöver man enkel tillgång till dokumentation. Det svåraste för nybörjare brukar vara att lista ut vilken teknik det ens är man behöver hjälp med. Exempelvis i ett Angular-projekt, så kan man bli osäker på om det man vill lära sig mer om har att göra med webbtekniker (Javascript och HTML), med Typescript, med Angular (api och HTML-mallsyntax) eller med RxJS.Navigera i webbdjungeln: Ajax
2019-05-02
Ajax är en uppsättning webbtekniker som låter en skapa webbplatser som kan skicka och hämta data från en server i bakgrunden, utan att påverka visningen av sidan man är inne på. Genom dessa Javascript-anrop, kan man sedan ändra innehållet dynamiskt, utan att behöva ladda om sidan.Navigera i webbdjungeln: Cms
2019-05-01
Som programmerare kan det vara svårt att acceptera, men ibland är den bästa lösningen en som kräver minimal mängd programmering. Om målet är att skapa en webbplats där redaktörer själva ska kunna lägga till mestadels textbaserat innehåll, kan det vara en bra idé att använda ett färdigt innehållshanteringssystem, det vill säga ett cms (content management system).Navigera i webbdjungeln: Protokoll
2019-04-30
Ett protokoll är en uppsättning regler som definierar hur två eller fler datorprogram kan kommunicera med varandra. På webben finns flera olika protokoll, men HTTP är det överlägset vanligaste, och det som hela webben grundar sig på. Med hjälp av dessa protokoll, kan man skapa ett api, som definierar ett gränssnitt för användning av ett bibliotek eller tjänst i en applikation.Navigera i webbdjungeln: Serverramverk
2019-04-29
Tidigare gick vi igenom ramverk för frontend som alltså körs i webbläsaren. Serverramverk är dom ramverk som styr hur man skriver sin applikation på backend, på serversidan. Beroende på vilket språk man vill skriva sin backend i, så kan val av ramverk bli mer eller mindre givet.Jag vill ha en SVG-editor
2019-04-28
I mitt senaste blogginlägg om säkerhetsmål inom datasäkerhet, skapade jag flera SVG-diagram. Processen var denna: Rita upp en skiss i draw.io Exportera dessa som SVG Kopiera in SVG-koden Testa den i olika webbläsare och fixa eventuella problem (visning i Firefox och Chrome skilde sig) Förenkla SVG-koden, bl.Introduktion till datasäkerhet: Säkerhetsmål
2019-04-27
För att lättare kunna resonera om vilken typ av attacker man vill skydda sitt system mot, brukar man inom datasäkerhet prata om "CIA": confidentiality (sekretess), integrity (integritet), och availability (tillgänglighet). Inte alla situationer kräver att alla dessa är uppfyllda, men i så fall bör det vara ett medvetet val.Introduktion till datasäkerhet: Principer
2019-04-24
Inom datasäkerhet finns några grundläggande antaganden om komplexitet och "absolut säkerhet". Komplexitet Ju mer komplext ett system är, desto lättare blir det (statistiskt) att attackera och därför svårare att skydda. På samma sätt kommer en mer komplex säkerhetslösning mer sannolikt ha egna säkerhetshål.Vem behöver datasäkerhet?
2019-04-22
Datasäkerhet behövs i vardagen. Här följer några exempel. Bankväsendet. Bankkort med pinkod och chip, monetära transaktioner, internetbanker, BankID, uttagsautomater. Mobiltelefoner. SIM-kort, operativsystemet, trådlösa uppdateringar, chattappar. Datorer. Operativsystemet, mjukvaruuppdateringar. Biljetter, id, access. Biljetter för kollektivtrafik, legitimation och pass, passerkort. Sakernas internet.Introduktion till datasäkerhet: Terminologi
2019-04-21
Här följer några viktiga begrepp inom datasäkerhet. Tillgång. (eng. asset) Något som ingår i miljön som understödjer arbete med information. Man brukar räkna med hårdvara (t.ex. servrar och switchar), mjukvara (t.ex. verksamhetskritiska applikationer och supportsystem) och konfidentiell information. Hot.Vad är datasäkerhet?
2019-04-19
När man pratar om datasäkerhet, säkerhet för informationssystem, så menar man: skydd av digital "data" och it-tillgångar mot interna och externa, illasinnade eller oavsiktliga hot På engelska finns två olika ord som båda översätts till "säkerhet" på svenska:Introduktion till datasäkerhet
2019-04-18
Du kommer inte bli en "hackare" som kan "pwn:a" intet ont anande användare genom att följa den här artikelserien. Målet är istället att du ska förstå några centrala koncept inom datasäkerhet, vilket kommer hjälpa dig att förstå vad säkerhet och den tillhörande terminologin innebär, och förhoppningsvis inse när man håller på att fatta dåliga säkerhetsbeslut, och hur dom kan förbättras.
Komposition: Arbeta med flera Task
s
2019-04-17
När man arbetar med Tasks i C# vill man ibland köra flera av dom parallellt, eller kanske veta när den första är avslutad. // Starta en task. var task1 = Task.Run(() => { if (!myServer.IsRunning) myServer.Start(); myMonitorService.Start(); }); // Starta ytterligare en task.
Konvertera till och från Task
2019-04-16
När man programmerar i C#, finns det fall då man vill konvertera från ett värde till en Task, och andra situationer där man vill göra det omvända. En Task kan innehålla ett värde av vilken typ som helst, men i det här inlägget kommer jag att använda int.
TaskCompletionSource
2019-04-15
I C# finns flera olika mönster för att hantera asynkronicitet. Det generella sättet att konvertera vilket mönster som helst till en Tasks är att använda en TaskCompletionSource. Därigenom gör man det möjligt att konsumera det andra mönstret via async/await.Task: Result
2019-04-14
Om en metod returnerar en Task så är det ofta en bra idé att fortsätta använda Tasks och async/await i sin egen kod. Det gör det mer uppenbart för dom som använder ens metod att operationen kan ta lång tid. Ibland måste man emellertid implementera ett synkront interface, och alltså blockera aktuell tråd till dess att en Task har avslutats.Task: Delay
2019-04-13
Oftast vill man att ens kod ska köra så snabbt som möjligt, men ibland behöver man lägga in en fördröjning. Istället för Thread.Sleep kan man skapa en task som avslutas efter det angivna antalet millisekunder med Task.Delay. private async Task<int> CalculateDelay() { // Vänta i 3 sek await Task.
Snyggare syntax med async
/await
2019-04-12
async och await ger snyggare syntax när man arbetar med Tasks i C#. Låt oss börja med en synkron beräkning. När man anropar den, så kommer den aktuella tråden att blockeras tills beräkningen är klar, vilket kan ta lång tid om det är en långsam beräkning.Task: ContinueWith
2019-04-07
Givet en Task kan man skicka in ett återanrop (callback), som exekveras när Tasken har fullföljts, antingen genom att resultatet satts, eller genom att exception har kastats. Task<int> futureResult = Task.Run(() => { // Gör en långsam beräkning i en annan tråd return 2 + 2; }); futureResult.Task: Run och FromResult
2019-04-06
Utför en uppgift Om man vill exekvera en uppgift i en egen tråd, men inte vill administrera trådpooler eller manuellt hålla koll på om uppgiften har utförts, så kan man använda Task.Run. Den resulterande Task som skapas innehåller information om huruvida den har kastat exception, avslutats korrekt eller avbrutits.
Task
, async
och await
i C#: Introduktion
2019-04-05
I C# finns olika sätt att hantera concurrency, samtidig exekvering. Jag förespråkar Tasks, vilket är ämnet för den här artikelserien. Vi går igenom hur Tasks fungerar och några metoder som man kan använda med dom, och hur syntaxen för async/await ofta underlättar användandet av Tasks.Navigera i webbdjungeln: Servrar
2019-03-29
Ordet "server" har många betydelser. I det här inlägget tittar vi på förmedlare, den applikation som lyssnar på en port och vidarebefordrar förfrågningar och svar genom att skicka dom vidare till andra applikationer. Det har funnits många sådana servrar genom tiderna, men år 2019 är det tre som dominerar.Navigera i webbdjungeln: Serverspråk
2019-03-26
I webbläsaren, på klientsidan, är man begränsad till att använda Javascript, CSS och HTML. På serversidan däremot har man fler möjligheter att använda just dom språk man tycker bäst om, utifrån dom behov man har. Statisk webbsida Innan du bestämmer dig vilket språk du ska programmera din backend i, så kan du fundera över om du verkligen behöver en backend över huvud taget.Navigera i webbdjungeln: Versionshantering
2019-03-25
Ett versionshanteringsprogram håller koll på olika versioner av din källkod, så att du lätt kan återgå till en tidigare version, eller arbeta tillsammans med andra utvecklare. Det i särklass vanligaste tekniken idag är Git, och även om det finns ett stort antal alternativa program, så kräver ett annat val än Git år 2019 en särskild motivering.Navigera i webbdjungeln: Editorer
2019-03-24
Editorer, också kallade textredigerare, är dom program som man använder för att skriva kod vid programmering. En editor visar koden i filen med syntaxmarkering (eng. syntax highlighting), och hjälper normalt till med indentering och många andra centrala funktioner vid programmering.Navigera i webbdjungeln: Minifiering
2019-03-22
När man skickar data över nätverket, så går det snabbare att skicka så lite som möjligt. Det här gäller förstås också den kod som skickas till webbläsaren. Därför brukar man använda verktyg för att minifiera sin kod: ta bort whitespace och kommentarer, förkorta variabelnamn och andra trick för att komprimera skriptet.Navigera i webbdjungeln: Lintning och formatering
2019-03-21
Det finns ett antal verktyg som inte egentligen krävs, men som markant förbättrar kvaliteten på koden man skriver. Här går vi igenom två kategorier av verktyg som hjälper en att följa en konsekvent kodstil: lintning och formatering. Lintning Ordet "lint" kommer från engelskan och betyder "ludd" på kläder eller liknande, vilket ju är extra fluff som man inte vill ha.Navigera i webbdjungeln: Byggverktyg
2019-03-20
Även om webbläsaren stödjer Javascript, så kommer man bara undan kompilering i dom allra minsta projekten. Koden som skickas över nätverket till webbläsaren bör vara kompakt, och oftast är få requests att föredra. För att samla ihop all kod till "bundles", så används en "bundler", vilket jag rätt och slätt har benämnt "byggverktyg".Navigera i webbdjungeln: Pakethantering och beroenden
2019-03-19
När din applikation börjar använda mer än något enstaka bibliotek, kan det vara bra att organisera alla dina beroenden med hjälp av en pakethanterare. I den här artikeln går vi igenom vad du behöver, men här följer en sammanfattning om du inte är intresserad av detaljerna.C# 7: Mer information
2019-03-18
Vi har gått igenom några av dom bästa och viktigaste nyheterna i C# 7, men det finns många fler för den som vill fördjupa sig. Microsoft har dokumenterat samtliga nyheter i C# 7: What's new in C# 7.0 What's new in C# 7.
C# 7: throw
-uttryck
2019-03-14
I C# har throw historiskt alltid varit ett eget statement, dvs. något som måste stå på sin egen rad, separerad med semikolon. Här följer ett exempel på hur man kan skriva en setter med en nullkontroll. private string name; public string Name { get => name; set { if (value == null) throw new ArgumentNullException("Value required"); name = value; } } I C# 7 utökar man throw.Concurrency-modell och eventloop i Javascript
2019-03-13
Javascript har en modell för concurrency, samtidig exekvering, som bygger på en "eventloop". Den här modellen skiljer sig rätt mycket från modellerna som finns i andra programmeringsspråk, såsom C, C# och Java. Koncept kopplade till exekvering Följande avsnitt förklarar en teoretisk modell.Navigera i webbdjungeln: Ramverk
2019-03-11
I förra delen gick vi igenom bibliotek, det vill säga en samling funktioner som "någon annan" har skrivit. Både bibliotek och ramverk uppfyller denna definition, men det senare styr kodstrukturen för hela din applikation. Det faktum att du har byggt upp din applikation med ett ramverk som utgångspunkt kan betyda att det är svårt att byta ut det, något som inte nödvändigtvis gäller för bibliotek.
C# 7: Förenklat default
-uttryck
2019-03-09
Ett genomgående tema i C# 7 är små förbättringar som gör livet som programmerare lite lättare. I det här inlägget kikar vi på hur man kan förenkla default-uttryck. Om kompilatorn automatiskt kan sluta sig till vilken typ som ska användas, så behöver man inte längre ange typen efter default.C# 7: Lokala funktioner
2019-03-08
En lokal funktion är som en metod inuti en annan metod, och kan ibland vara ett alternativ till privata metoder som bara anropas från ett ställe. Dom är särskilt användbara när man behöver en hjälpfunktion och kan tydliggöra att en funktion bara används inom en annan metods kontext.
C# 7: Värdetuplar med ValueTuple
2019-03-04
I C# finns klasser och structar, men ibland räcker det med något lite enklare, och där är tuplar en lösning. Redan före C# 7 fanns det tuplar, men dom var osmidiga att använda, och för att komma åt innehållet fick man skriva använda properties med namn Item1, Item2 och så vidare.C# 7: Deklarera utvariabler
2019-03-03
Likt förra artikeln i denna serie, där vi kunde deklarera en variabel direkt i is-uttrycket, kan man i C# 7 också deklarera och initialisera en variabel direkt i ett metodanrop med out. private Dictionary<string, string> Translations = new Dictionary<string, string> { { "Hello", "Hej" }, { "World", "Värld" }, }; public string Translate(string key) { string translation; if (Translations.
C# 7: Mönstermatchning med is
och switch
2019-03-02
C# är ett programmeringsspråk som kontinuerligt tar beprövade idéer från andra språk. En sådan idé är mönstermatchning (eng. pattern matching) från funktionella programmeringsspråk. Det är ett alternativ till objektorienteringens arv, där man med hjälp av virtual och override väljer implementation baserat på objektets typ.C# 7: Numeriska värden
2019-03-01
C# är ett programmeringsspråk som utvecklas kontinuerligt. Medan det går att fortsätta skriva "gammal" C#, så kan man år 2019 ibland använda mer flexibel och kompakt syntax. I den här artikelserien går vi igenom några av dom viktigaste nyheterna i C# 7, som gavs ut år 2017.Navigera i webbdjungeln: Bibliotek
2019-02-27
Ett Javascript-bibliotek är Javascript som "någon annan" har skrivit, och som underlättar utvecklingen av applikationer i Javascript. Ofta är det en samling funktioner som är lättare att använda än den underliggande tekniken, t.ex. eftersom biblioteket har testats i flera webbläsare som implementerar den underliggande tekniken lite olika.Navigera i webbdjungeln: Webbläsarmotorer och runtimemiljöer
2019-02-26
I den här artikeln ska vi gå igenom definitioner för några av komponenterna i en webbläsare, så det blir mer tekniskt än resten av serien. Om du vill kan du hoppa till den översiktliga tabellen. Definitioner Det finns åtminstone tre "motor"-koncept i en webbläsare: webbläsarmotorn, renderingsmotorn och Javascript-motorn, där dom senare två ingår som del i den förra.Navigera i webbdjungeln: Klient och server
2019-02-22
Konceptet klient-server är ganska enkelt: en klient har rollen att begära tjänster av en server. Ofta finns det många klienter som begär tjänster av en centraliserad server. På webben är klienten det som sker i webbläsaren, medan servern är den som skickar kod och data till webbläsaren.Navigera i webbdjungeln: Webbspråk
2019-02-21
När man gör webbplatser måste man använda dom programmeringsspråk som stöds på webben, och det är inte så många: en webbsida måste skicka Javascript, HTML och CSS till webbläsaren, och här finns det knappast några alternativ. Men, säger du, jag har hört talas om Typescript!Navigera i webbdjungeln
2019-02-19
Om du tycker att webbtekniker kan vara lite trassliga, så är du inte ensam. I början på min egen programmeringskarriär förstod jag inte skillnaden mellan kod som körs på klientsidan och kod som körs på serversidan, och försökte således köra PHP direkt i webbläsaren.Idempotent
2019-02-15
Inom programmering är en funktion eller metod är idempotent om ett anrop till den ger samma slutresultat som många anrop. Ett konkret exempel skulle kunna vara en metod Delete(id). Att anropa Delete(12) en eller flera gånger ger samma resultat: elementet med id 12 raderas en enda gång.Webb-api:er: HTTP utan Rest
2019-02-08
Jag har skrivit om Rest och HTTP, och hur dom utvecklades ihop och hur HTTP är en grundläggande förutsättning för Rest. Men det går förstås att använda HTTP utan Rest, vilket vi fick exempel på när vi tittade på Soap.Webb-api:er: Rest och HTTP
2019-02-07
I förra inlägget introducerade jag webb-api:er och Soap, det senare ett gediget standardiserat protokoll med vilket man kan skapa det förra. Som kontrast till Soap ska vi i det här lägget översiktligt gå igenom Rest, en mindre formell, mer minimalistisk standard.Webb-api:er: Soap
2019-02-06
Ett api definierar ett gränssnitt för användning av ett bibliotek eller tjänst i en applikation. Ett webb-api definierar ett sådant api, som kan användas med webbtekniker. Två tekniker - närapå modeord? - som brukar nämnas är Soap och Rest. Dessa kan man alltså använda för att skapa ett webb-api, men hur, och vad innebär begreppen?Introduktion till Linq: Funktionell programmering och lat evaluering
2019-02-02
Linq (Language Integrated Query) är en komponent i C# och .Net. I det här inlägget tittar vi på hur Linq genom sin query-funktionalitet hjälper oss att uttrycka programmeringsproblem mer deklarativt i enlighet med principerna för funktionell programmering, i kontrast till imperativ programmering.Introduktion till Linq: join
2019-02-01
Nu ska vi gå igenom hur man kan matcha ihop två listor med hjälp av join, en del av Linq (Language Integrated Query). Enkel join, för uppdatering Motsvarande i SQL: INNER JOIN (synonym: JOIN). Om du har koll på JOIN i SQL, så kommer du känna igen det i Linq också.Introduktion till Linq: SelectMany()
2019-01-31
Här går vi igenom hur man väljer ut element i nästlade listor med SelectMany() från Linq (Language Integrated Query). Select() och SelectMany() Motsvarande i Javascript: map() och flatMap(). Redan i första inlägget gick vi igenom hur Select() fungerar: för varje element i listan väljer vi ett element som ska ingå i den resulterande listan.Introduktion till Linq: Lambdauttryck
2019-01-30
Om du blir förvirrad av vad x => x egentligen betyder, så har du kommit rätt! Syntaxen är kompakt och kan vara svårtydd, om man inte vet vad alla delar betyder. Lambdauttryck (eng. lambda expressions) är metoder eller funktioner som man definierar som del av ett uttryck, oftast utan att ge dom ett namn.Introduktion till Linq: ToList() och ToArray()
2019-01-28
Det här inlägget om Linq (Language Integrated Query), handlar om hur man kan konvertera en samling till en annan typ. ToList() Om man har en IEnumerable kan det finnas många anledningar att göra om den till en lista. Man kanske behöver returnera samlingen som en lista, eller så vill man säkerställa att den IEnumerable man har inte gås igenom flera gånger (t.Introduktion till Linq: Count(), Any() och All()
2019-01-27
I det här inlägget om Linq (Language Integrated Query), en komponent i C# och .NET, så går vi igenom några vanliga metoder för att räkna antal matchningar. Count() Om man har en IEnumerable, och vill ta reda på antalet element, antingen totalt eller som uppfyller ett visst kriterium, så kan Count() med fördel användas.Introduktion till Linq
2019-01-26
Linq (Language Integrated Query) är en komponent i C# och .NET, som direkt i koden tillhandahåller query-funktionalitet mot databastabeller, listor eller andra IEnumerable. Tilläggsmetoder och frågesyntax Linq kan användas med två olika syntaxer. Dom båda följande uttrycken gör exakt samma sak, och vilken syntax man väljer är en smaksak.