public void Run()
        {
            // Der DataContext überwacht auch Änderungen an Objekten!
            // Somit ist es möglich ohne zusätzlichen Aufwand
            // das Change Set gegen die Datenbank zu schicken.
            using (var dbx = new KnowledgeBaseDataContextDataContext()) {
                // Logging aktivieren
                dbx.Log = Console.Out;

                // Artikel mit Id 218 holen.
                var article = (from x in dbx.Articles
                               where x.Id == 218
                               select x).Single();

                // Titel und DateEdit ändern.
                article.Title    = "Hallo Stuttgart!";
                article.DateEdit = DateTime.Now;

                // Änderungen speichern.
                // Hinweis: Bei mehrmaligem Ausführen hat das Setzten des Titels kein Effekt mehr,
                // da dieser bereits "Hallo Karlsruhe!" ist. Der DataContext merkt das und sendet
                // nur 'wahre' Änderungen an die Datenbank.
                dbx.SubmitChanges();
            }

            // Nochmal den Artikel aus der Datenbank holen und die geänderten Felder anzeigen.
            using (var dbx = new KnowledgeBaseDataContextDataContext()) {
                var article = (from x in dbx.Articles
                               where x.Id == 218
                               select x).Single();

                Console.WriteLine("Title: {0}\nChanged: {1}", article.Title, article.DateEdit);
            }
        }
        public void Run()
        {
            // Es sollen nur Artikel aus folgender Kategorie abgerufen werden:
            var categoryTitle = "Visual Basic.NET";

            // Wie immer muss zunächst der DataContext instanziert werden.
            using (var dbx = new KnowledgeBaseDataContextDataContext()) {
                // Der DataContext kann sein Logging auf der Console ausgeben.
                dbx.Log = Console.Out;

                // Die Basis Abfrage solle alle Artikel einer Kategorie mit einem
                // bestimmten Titel zurückgeben.
                var articles = from mapping in dbx.ArticleCategoryMappings
                               where mapping.Category.Title == categoryTitle
                               select mapping.Article;

                // Das Ergebnis soll nach dem Artikel-Titel aufsteigend sortiert werden
                var ordered = from a in articles
                              orderby a.Title ascending
                              select a;

                // Und zuletzt interessieren nur die ersten 4 Elemente
                var firstFour = ordered.Take(4);

                // Erst hier wird die Linq Query in Sql übersetzt und ausgeführt
                // (Siehe Looging auf der Console)
                // Alle drei Query (Basis, Sortierung, Take) werden in ein einziges Sql zusammengeführt.
                foreach (var article in firstFour)
                {
                    Console.WriteLine(article.Title);
                }
            }
        }
        public void Run()
        {
            // Der DataContext steuert die Kommunikation mit der Datenbank.
            // Er übersetzt Linq Abfragen in Sql, führt diese gegen die Datenbank
            // aus und erzeugt aus den zurückgegebenen Daten Objekte.
            using (var dbx = new KnowledgeBaseDataContextDataContext()) {
                // using sollte verwendet werden, da der DataContext
                // nicht-verwaltete Ressourcen erzeugt, wie z.b.
                // SqlConnection Objekte.

                // Auch hier können Abfragen gegen eine Datenbank GENAU SO
                // definiert werden wie Abfragen gegen Objekt-Listen oder
                // Xml.

                // In diesem Beispiel werden alle Artikel aus der Datenbank gelesen,
                // die neuer sind als zwei Monate, die Ergebnismenge wird sortiert
                // und nur die obersten 4 Elemente werden zurückgegeben.
                var articles = (from x in dbx.Articles
                                where x.DateCreated >= DateTime.Now.AddMonths(-2)
                                orderby x.Views descending
                                select x).Skip(3).Take(4);

                System.Diagnostics.Debug.WriteLine(articles);

                // Hinweis: Die Abfrage wird komplett nach Sql übersetzt,
                // man findet also sowohl die Where Einschränkung, als auch die
                // sortierung und das Take wieder!

                // Die Abfragen wird übrigens erst ausgeführt, wenn articles mit foreach durchlaufen wird
                // bzw. .Count aufgerufen wird. Diese 'späte' Ausführung wird durch IQueryable ermöglicht.

                // Daten abrufen und ausgeben.
                foreach (var article in articles)
                {
                    Console.WriteLine(article.Title);
                }
            }
        }