{"id":55000166,"date":"2019-02-01T00:00:00","date_gmt":"2020-03-27T19:36:13","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=166"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EF_Daten_abfragen_mit_VB_und_LINQ","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EF_Daten_abfragen_mit_VB_und_LINQ\/","title":{"rendered":"EF: Daten abfragen mit VB und LINQ"},"content":{"rendered":"<p><b>Unter Access waren Sie es gew&ouml;hnt, auf einfache Weise Abfragen mit der Abfrage-Entwurfsansicht zu erstellen. Ein paar Tabellen hinzuf&uuml;gen, die Felder ausw&auml;hlen, Kriterien, Sortierungen und Gruppierungen hinzuf&uuml;gen &#8211; fertig war die Abfrage. Gegebenenfalls haben Sie SQL-Kenntnisse und konnten SQL-Anweisungen f&uuml;r den Einsatz in VBA-Anweisungen von Hand schreiben. Unter VB und Entity Framework sieht das anders aus, weil wir ja nicht mehr auf Tabellen zugreifen, sondern auf Objekte. Und f&uuml;r die gibt es eine andere Abfragesprache, die sich direkt in den VB-Code integrieren l&auml;sst. Dieser Artikel stellt die Abfragetechnik LINQ f&uuml;r Visual Basic vor.<\/b><\/p>\n<h2>Voraussetzungen<\/h2>\n<p>Um die Beispiele dieses Artikels nachstellen zu k&ouml;nnen, ben&ouml;tigen das Entity Data Model aus dem Beispielprojekt aus dem Download zu diesem Artikel. F&uuml;r die Beispielabfragen f&uuml;gen wir dem Fenster <b>MainWindow.xaml <\/b>unserer Beispielanwendung ein <b>DataGrid<\/b>-Steuerelement hinzu. Der Code zum F&uuml;llen des <b>DataGrid<\/b>-Elements mit allen Eigenschaften aller <b>Kunden<\/b>-Elemente wie in Bild 1 sieht so aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_166_001.png\" alt=\"DataGrid mit allen Kundendaten\" width=\"649,559\" height=\"370,1678\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: DataGrid mit allen Kundendaten<\/span><\/b><\/p>\n<pre>Imports System.Collections.ObjectModel\r\n<span style=\"color:blue;\">Class<\/span> MainWindow\r\n     <span style=\"color:blue;\">Private <\/span>dbContext<span style=\"color:blue;\"> As <\/span>BestellverwaltungContext\r\n     <span style=\"color:blue;\">Private <\/span>_Kunden<span style=\"color:blue;\"> As <\/span>ObservableCollection(Of Kunde)\r\n     <span style=\"color:blue;\">Public <\/span>Property Kunden<span style=\"color:blue;\"> As <\/span>ObservableCollection(Of Kunde)\r\n         Get\r\n             Return _Kunden\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As <\/span>ObservableCollection(Of Kunde))\r\n             _Kunden = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property\r\n     <span style=\"color:blue;\">Public <\/span>Sub New()\r\n         InitializeComponent()\r\n         dbContext = <span style=\"color:blue;\">New<\/span> BestellverwaltungContext\r\n         Kunden = <span style=\"color:blue;\">New<\/span> ObservableCollection(Of Kunde)(dbContext.Kunden)\r\n         DataContext = Me\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Den XAML-Code haben wir so einfach wie m&ouml;glich gehalten:<\/p>\n<pre>&lt;Window x:Class=\"MainWindow\" ... Title=\"MainWindow\" Height=\"450\" Width=\"800\"&gt;\r\n     &lt;Grid&gt;\r\n         &lt;DataGrid ItemsSource=\"{Binding Kunden}\"&gt;&lt;\/DataGrid&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Window&gt;<\/pre>\n<p>Die Anweisung der Konstruktor-Methode <b>New()<\/b>, die wir als Ausgangspunkt f&uuml;r die folgenden Beispiele nutzen, ist diese:<\/p>\n<pre>Kunden = <span style=\"color:blue;\">New<\/span> ObservableCollection(Of Kunde)(dbContext.Kunden)<\/pre>\n<p>Hier weisen wir der <b>ObservableCollection <\/b>mit Elementen des Typs <b>Kunde <\/b>einfach alle Kunden des Datenbankkontextes zu, also <b>dbContext.Kunden<\/b>. Statt <b>dbContext.Kunden <\/b>k&ouml;nnen wir auch die nachfolgend vorgestellten Abfrageausdr&uuml;cke verwenden.<\/p>\n<h2>Einfache Auswahlabfrage<\/h2>\n<p>Die einfachste Syntax bei einer LINQ-Abfrage sieht wie folgt aus &#8211; hier noch in Zusammenhang mit unserer Anweisung:<\/p>\n<pre>Kunden = <span style=\"color:blue;\">New<\/span> ObservableCollection(Of Kunde)(From Kunde In dbContext.Kunden)<\/pre>\n<p>Der Einfachheit halber schauen wir uns nun noch den Teil an, den wir in eine <b>ObservableCollection <\/b>umwandeln, hier also diesen Teil:<\/p>\n<pre>From Kunde In dbContext.Kunden<\/pre>\n<p>Dies liefert alle Elemente der <b>Kunden<\/b>-Auflistung. <b>dbContext.Kunden <\/b>ist dabei die Quelle der Daten. <b>Kunde <\/b>ist eine Variable, auf die wir mit weiteren Schl&uuml;sselw&ouml;rtern der Abfragesprache LINQ zugreifen k&ouml;nnen. Diese Abfrage liefert das gleiche Ergebnis wie <b>dbKontext.Kunden<\/b>.<\/p>\n<p>Eine ausf&uuml;hrlichere Schreibweise unter Einbeziehung des <b>Select<\/b>-Schl&uuml;sselworts sieht wie folgt aus und liefert wiederum das gleiche Ergebnis:<\/p>\n<pre>From Kunde In dbContext.Kunden Select Kunde<\/pre>\n<h2>Daten filtern mit Where<\/h2>\n<p>Wenn Ihnen die bisherigen Schl&uuml;sselw&ouml;rter schon von SQL bekannt vorkamen, gibt es gute Nachrichten &#8211; das <b>Where<\/b>-Schl&uuml;sselwort d&uuml;rften Sie auch kennen. Dieses h&auml;ngen Sie hinter die <b>From<\/b>-Anweisung an und vor der <b>Select<\/b>-Anweisung.<\/p>\n<p>Das folgende Beispiel selektiert beispielsweise nur den Kunden, dessen Feld <b>ID <\/b>den Wert <b>1 <\/b>aufweist (Ergebnis siehe Bild 2):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_166_002.png\" alt=\"DataGrid mit dem Kunden mit dem Wert 1 im Feld ID\" width=\"549,6265\" height=\"152,8188\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: DataGrid mit dem Kunden mit dem Wert 1 im Feld ID<\/span><\/b><\/p>\n<pre>From Kunde In dbContext.Kunden Where Kunde.ID = 1 Select Kunde<\/pre>\n<h2>Ersatz f&uuml;r den SQL-LIKE-Operator: Contains, StartsWith und EndsWith<\/h2>\n<p>Unter SQL haben Sie Vergleiche mit Platzhaltern wie dem Sternchen mit dem <b>LIKE<\/b>-Operator realisiert, also etwa mit <b>SELECT * FROM tblKunden WHERE PLZ LIKE &#8220;1*&#8221;<\/b>, um alle Kunden mit einer PLZ, die mit <b>1 <\/b>beginnt, zu ermitteln.<\/p>\n<p>Unter LINQ gibt es dazu die drei Operatoren <b>Contains<\/b>, <b>StartsWith <\/b>und <b>EndsWith<\/b>:<\/p>\n<ul>\n<li><b>Contains<\/b>: Entspricht der Suche nach einem Ausdruck, der irgendwo im Feldinhalt vorkommen darf, also gleichbedeutend mit <b>LIKE &#8220;*<Suchbegriff>*&#8221;<\/b>.<\/li>\n<li><b>StartsWith<\/b>: Sucht nach Datens&auml;tzen, deren zu durchsuchendes Feld mit dem angegebenen Ausdruck beginnt. Unter SQL w&auml;re das <b>LIKE &#8220;<Suchbegriff>*&#8221;<\/b>.<\/li>\n<li><b>EndsWith<\/b>: Sucht nach Datens&auml;tzen, deren zu durchsuchendes Feld auf den angegebenen Ausdruck endet. Unter SQL entspricht das <b>LIKE &#8220;*<Suchbegriff>&#8220;<\/b>.<\/li>\n<\/ul>\n<p>Die Operatoren h&auml;ngen wir an das zu durchsuchende Feld an und geben den Suchbegriff in Klammern an. Alle Kunden, deren <b>PLZ <\/b>mit <b>1 <\/b>beginnt, ermitteln wir also mit dem folgenden Ausdruck:<\/p>\n<pre>From Kunde In dbContext.Kunden Where Kunde.PLZ.StartsWith(\"1\") Select Kunde<\/pre>\n<h2>Kriterien verkn&uuml;pfen<\/h2>\n<p>Die Suchkriterien verkn&uuml;pfen Sie einfach wie von SQL gewohnt mit den Operatoren <b>Or <\/b>und <b>And<\/b>. Kunden, deren Vorname und Nachname mit <b>A <\/b>beginnt, finden Sie beispielsweise so:<\/p>\n<pre>From Kunde In dbContext.Kunden Where Kunde.Vorname.StartsWith(\"A\") Or Kunde.Nachname.StartsWith(\"A\") Select Kunde<\/pre>\n<h2>Daten sortieren mit Order By<\/h2>\n<p>Nat&uuml;rlich k&ouml;nnen Sie die Daten auch in beliebiger Sortierung in die <b>ObservableCollection <\/b>f&uuml;llen. Dazu verwenden wir den folgenden Abfrageausdruck, in dem wir das <b>Order By<\/b>-Schl&uuml;sselwort gefolgt von dem zu sortierenden Feld angeben:<\/p>\n<pre>From Kunde In dbContext.Kunden Order By Kunde.Nachname Select Kunde<\/pre>\n<p>Wenn Sie nach mehreren Feldern sortieren wollen, geben Sie diese durch ein Komma voneinander getrennt hinter dem <b>Order By<\/b>-Schl&uuml;sselwort an:<\/p>\n<pre>From Kunde In dbContext.Kunden Order By Kunde.Nachname, Kunde.Vorname Select Kunde<\/pre>\n<p>Hier haben wir noch nicht explizit die Sortierreihenfolge angegeben. In diesem Fall sortiert die Abfrage aufsteigend nach den angegebenen Feldern. Sie k&ouml;nnen die Sortierreihenfolge auch explizit angeben, indem Sie eines der Schl&uuml;sselw&ouml;rter <b>Ascending <\/b>(<b>Aufsteigend<\/b>) oder <b>Descending <\/b>(<b>Absteigend<\/b>) hinter dem Sortierfeld angeben:<\/p>\n<pre>From Kunde In dbContext.Kunden Order By Kunde.Nachname Ascending, Kunde.Vorname Descending Select Kunde<\/pre>\n<h2>Reihenfolge der Elemente<\/h2>\n<p>Im Gegensatz zu SQL, wo die Reihenfolge strikt festgelegt ist (zum Beispiel <b>SELECT &#8230; FROM &#8230; WHERE &#8230; ORDER BY<\/b>), k&ouml;nnen Sie in LINQ etwa die Reihenfolge der <b>Where<\/b>&#8211; und der <b>Order By<\/b>-Klausel vertauschen. Wir empfehlen jedoch, die Reihenfolge wie unter SQL zu gestalten, um die Lesbarkeit zu erh&ouml;hen. Die folgende Abfrage, bei der wir die <b>Order By<\/b>-Klausel vor der <b>Where<\/b>-Klausel platziert haben, funktioniert jedoch genauso wie die mit der umgekehrten Reihenfolge:<\/p>\n<pre>From Kunde In dbContext.Kunden Order By Kunde.Nachname Ascending Where Kunde.Nachname.StartsWith(\"A\") Select Kunde<\/pre>\n<h2>Die &#8220;Laufvariable&#8221;<\/h2>\n<p>Die Bezeichnung zwischen <b>From <\/b>und <b>In<\/b>, in unserem Fall also etwa <b>Kunde<\/b>, k&ouml;nnen Sie beliebig w&auml;hlen. Wenn Sie den Abfragecode k&uuml;rzer darstellen wollen, k&ouml;nnen Sie auch einfach <b>k <\/b>verwenden:<\/p>\n<pre>From k In dbContext.Kunden Where k.Nachname.StartsWith(\"A\") Order By k.Nachname Ascending Select k<\/pre>\n<h2>Zu selektierende Daten festlegen mit Select<\/h2>\n<p>Die <b>Select<\/b>-Anweisung haben wir in den obigen Beispielen schon ausgiebig genutzt. Allerdings haben wir mit <b>&#8230; Select Kunde <\/b>immer einfach die kompletten <b>Kunde<\/b>-Objekte selektiert. Das h&auml;tten wir auch erreicht, wenn wir die <b>Select<\/b>-Klausel weggelassen h&auml;tten. <b>Select <\/b>bietet allerdings eine Menge mehr als nur die M&ouml;glichkeit, genau die Objekte zur&uuml;ckzuliefern, welche die zu untersuchende Auflistung bietet, in diesem Fall die Liste der <b>Kunde<\/b>-Objekte. In allen F&auml;llen, in denen Sie nicht einfach die Objekte zur&uuml;ckliefern, die in der zu untersuchenden Auflistung enthalten sind, handelt es sich um eine sogenannte Projektion. Schauen wir uns an, wie das aussehen kann! Wenn wir beispielsweise nur die ID, den Vornamen und den Nachnamen des Kunden erhalten wollen, formulieren wir den Ausdruck wie folgt:<\/p>\n<pre>From k In dbContext.Kunden Select k.ID, k.Vorname, k.Nachname<\/pre>\n<p>Allerdings liefert dies dann kein Objekt vom Typ <b>Kunde <\/b>mehr zur&uuml;ck, was sich in einer entsprechenden Fehlermeldung bemerkbar macht (siehe Bild 3). Also spielen wir erst einmal au&szlig;erhalb des DataGrids mit dieser M&ouml;glichkeit:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2019_01\/pic_166_003.png\" alt=\"Fehlermeldung, wenn keine Objekte des Typs Kunde zur&uuml;ckgeliefert werden\" width=\"700\" height=\"304,1581\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Fehlermeldung, wenn keine Objekte des Typs Kunde zur&uuml;ckgeliefert werden<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>KundenMitName = From k In dbContext.Kunden Select k.ID, k.Vorname, k.Nachname\r\nFor Each k In KundenMitName\r\n     <span style=\"color:blue;\">Debug.Print<\/span>(k.ID.ToString() + \" \" + k.Vorname + \" \" + k.Nachname)\r\n<span style=\"color:blue;\">Next<\/span><\/pre>\n<p>Wir weisen also das Ergebnis, das die Eigenschaften <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>der Elemente aus <b>dbContext.Kunden <\/b>enth&auml;lt, der Variablen <b>KundenMitName <\/b>zu. <b>KundenMitName <\/b>wir dann zu einer Variablen des Typs <b>DbQuery<\/b>. Auf die enthaltenen Eigenschaften k&ouml;nnen wir wie auf die Eigenschaften einer Klasse zugreifen. Im Beispiel oben durchlaufen wir diese Elemente in einer <b>For Each<\/b>-Schleife, wobei wir das aktuelle Element der Variablen <b>k <\/b>zuweisen. Diese h&auml;lt dann die Eigenschaften <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>bereit. Diese geben wir innerhalb der Schleife mit der <b>Debug.Print<\/b>-Anweisung im <b>Output<\/b>-Fenster aus.<\/p>\n<h2>DbQuery-Ergebnis in DataGrid anzeigen<\/h2>\n<p>Wie aber zeigen wir dieses Ergebnis im DataGrid an Dieses ist ja an die Eigenschaft <b>Kunden <\/b>der Code behind-Klasse gebunden. Wenn wir dies nicht &auml;ndern wollen, m&uuml;ssen wir die Informationen <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>anderweitig in Elemente des Typs <b>Kunde <\/b>schreiben und diese dann der Auflistung zuweisen. Aber gelingt uns das Der theoretische Ansatz sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>KundenMitName = From k In dbContext.Kunden Select <span style=\"color:blue;\">New<\/span> Kunde <span style=\"color:blue;\">With<\/span> {.ID = k.ID, .Vorname = k.Vorname, .Nachname = k.Nachname}\r\nKunden = <span style=\"color:blue;\">New<\/span> ObservableCollection(Of Kunde)(KundenMitName)<\/pre>\n<p>Hier weisen wir einer Variablen namens <b>KundenMitName <\/b>das Ergebnis der Abfrage in Form von Objekten mit den Eigenschaften <b>ID<\/b>, <b>Vorname <\/b>und <b>Nachname <\/b>zu. Danach wollen wir das Ergebnis der &ouml;ffentlichen <b>ObservableCollection<\/b>-Variablen <b>Kunden <\/b>zuweisen. Das liefert allerdings den Fehler <b>The entity or complex type &#8221;EFAbfragnVB.Kunde&#8221; cannot be constructed in a LINQ to Entities query<\/b>. Der Grund f&uuml;r den Fehler ist, dass die Kunde-Entit&auml;ten nur teilweise mit den Daten aus der Datenbank gef&uuml;llt werden, was in einem nicht aktualisierbaren Zustand resultiert.<\/p>\n<p>Also verwenden wir doch eine neue Klasse, um das neue Ergebnis zu speichern. Diese Klasse sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> KundeMitName\r\n     <span style=\"color:blue;\">Public <\/span>Property ID<span style=\"color:blue;\"> As <\/span>System.Int32\r\n     &lt;StringLength(255)&gt;\r\n     &lt;Required&gt;\r\n     <span style=\"color:blue;\">Public <\/span>Property Vorname<span style=\"color:blue;\"> As <\/span>System.String\r\n     &lt;StringLength(255)&gt;\r\n     &lt;Required&gt;\r\n     <span style=\"color:blue;\">Public <\/span>Property Nachname<span style=\"color:blue;\"> As <\/span>System.String\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Den Code der Code behind-Klasse von <b>KundenMitName.xaml <\/b>gestalten wir wie folgt, wobei wir die neue private Variable und die &ouml;ffentliche Eigenschaft <b>_KundenMitName <\/b>und <b>KundenMitName <\/b>nennen:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> KundenMitName\r\n     <span style=\"color:blue;\">Private <\/span>dbContext<span style=\"color:blue;\"> As <\/span>BestellverwaltungContext\r\n     <span style=\"color:blue;\">Private <\/span>_KundenMitName<span style=\"color:blue;\"> As <\/span>List(Of KundeMitName)\r\n     <span style=\"color:blue;\">Public <\/span>Property KundenMitName<span style=\"color:blue;\"> As <\/span>List(Of KundeMitName)\r\n         Get\r\n             Return _KundenMitName\r\n         End Get\r\n         Set(value<span style=\"color:blue;\"> As <\/span>List(Of KundeMitName))\r\n             _KundenMitName = value\r\n         End <span style=\"color:blue;\">Set<\/span>\r\n     End Property<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000166\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000166?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000166\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter Access waren Sie es gew&ouml;hnt, auf einfache Weise Abfragen mit der Abfrage-Entwurfsansicht zu erstellen. Ein paar Tabellen hinzuf&uuml;gen, die Felder ausw&auml;hlen, Kriterien, Sortierungen und Gruppierungen hinzuf&uuml;gen &#8211; fertig war die Abfrage. Gegebenenfalls haben Sie SQL-Kenntnisse und konnten SQL-Anweisungen f&uuml;r den Einsatz in VBA-Anweisungen von Hand schreiben. Unter VB und Entity Framework sieht das anders aus, weil wir ja nicht mehr auf Tabellen zugreifen, sondern auf Objekte. Und f&uuml;r die gibt es eine andere Abfragesprache, die sich direkt in den VB-Code integrieren l&auml;sst. Dieser Artikel stellt die Abfragetechnik LINQ f&uuml;r Visual Basic vor.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012019,662019,44000008,44000021],"tags":[],"yst_prominent_words":[],"class_list":["post-55000166","post","type-post","status-publish","format-standard","hentry","category-66012019","category-662019","category-Datenzugriffstechnik","category-Entity_Framework"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000166"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000166\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000166"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}