Softwareentwicklung mit Delphi
Posts 1-4 of 4
-
Michael Schindler Premium Member Group moderatorThe company name is only visible to registered members.Language Integrated Query (LINQ)
LINQ aus Wikipedia, der freien Enzyklopädie
LINQ ist die Abkürzung für Language INtegrated Query. Es handelt sich um eine von Microsoft entwickelte Methode um SQL-, XLink- und XQuery-Abfragen direkt in eine andere Programmiersprache wie etwa C# 3.0, VB.Net und Java als Code statt als String einzubinden.
Dies hat den Vorteil, dass der Code durch den Compiler auf Fehler geprüft und optimiert werden kann.
Microsoft:
http://msdn.microsoft.com/netframework/future/linq/
Danny Thorpe (Borland) über die Integration in Delphi:
http://blogs.borland.com/dcc/archive/2005/09/15/21195.aspx
This post was modified on 23 Sep 2005 at 03:56 pm.- 23 Sep 2005, 3:54 pm
-
Hubert PetersThe company name is only visible to registered members.Re: Language Integrated Query (LINQ)
Hallo Herr Schindler,
mit LINQ habe ich mich auch mal eine Zeitlang beschäftigt und
das Thema wieder in die Ecke gestellt. Die Nachteile sind meiner Meinung
nach zu groß, besonders bei Projekten die mehr als 2-3 Programmierer
benötigen. Ich finde es macht auch keinen Sinn Funktionalitäten die eine
RDBMS schon abdeckt in die Programmierung mit einzubringen und
somit das Rad neu zu erfinden.
Bei Änderungen am Datenmodell ist LINQ einfach nicht flexible genug.
Wenn ein Projekt viele gleiche, sich nicht großartig ändernde Abfragen
enthält, ist man mit StoredProc Funktionen warscheinlich besser bedient.
Eine Mehrbelastung für die DB ist das eigentlich auch nicht und die
Ergebnismenge kann in einem Programme flexible abgefragt werden.
Ein weiterer Vorteil ist auch das man Feldnamen ändern kann und muß nur
die SP änderen, da ja das Ergebnisfeld anders heißen kann als das Tabellenfeld.
Also ich denke LINQ ist wieder so ein Spielzeug von MS genauso wie .NET.
Keiner bracht es aber einige tuen's weil Microsoft draufsteht.
Michael Schindler schrieb:
LINQ aus Wikipedia, der freien Enzyklopädie
LINQ ist die Abkürzung für Language INtegrated Query. Es handelt sich
um eine von Microsoft entwickelte Methode um SQL-, XLink- und
XQuery-Abfragen direkt in eine andere Programmiersprache wie etwa C#
3.0, VB.Net und Java als Code statt als String einzubinden.
Dies hat den Vorteil, dass der Code durch den Compiler auf Fehler
geprüft und optimiert werden kann.
Microsoft:
http://msdn.microsoft.com/netframework/future/linq/
Danny Thorpe (Borland) über die Integration in Delphi:
http://blogs.borland.com/dcc/archive/2005/09/15/21195.aspx
This post was modified on 02 Oct 2005 at 01:42 pm.- 02 Oct 2005, 1:40 pm
-
Michael Schindler Premium Member Group moderatorThe company name is only visible to registered members.Re^2: Language Integrated Query (LINQ)
Hallo,
wir haben ein grosses Projekt mit mehreren Entwicklern am laufen. Als Datenbank verwenden wir Oracle. Alle SQL´s sind in einer eigenen Datenbanktabelle abgelegt und werden via Stored Procedures selektiert und verwendet.
Aus meiner Sicht hat LINQ in diesem Projekt Vor- und Nachteile.
Ich bin Ihrer Meinung dass man nicht unbedingt die bereits weit entwickelte Funktionalitäten von PL/SQL in Delphi direkt integrieren muss. Wahrscheinlich würden auch Funktionen von PL/SQL der Standardisierung weichen müssen.
Auf der anderen Seite sind die "Leichtsinnsfehler" bei der Verwendung von SQL ungebremst. Feldnamen stimmen nicht, Operator vergessen etc. Mit einem Compiler wäre dieses Problem gelöst.
Fazit: Für RDBMS Systeme sehe ich die Integration von SQL in der IDE nicht zwingend.
ABER:
Das LINQ Projekt deckt auch einen Bereich ab den ich für sehr interessant halte:
--> IEnumberable
Die Query deckt nicht nur RDBMS und XML ab sondern funktioniert auch mit Arrays und Aufählungstypen.
Mit LINQ sehe ich die Möglichkeit aus der Welt der Schleifen (for ... count-1... if...then...exit) auszubrechen und einen komfortableren Weg zu gehen.
Hier ein Beispiel gefunden bei MSDN:
...
string[] names = { "Burke", "Connor", "Frank",
"Everett", "Albert", "George",
"Harris", "David" };
IEnumerable<string> expr = from s in names
where s.Length == 5
orderby s
select s.ToUpper();
foreach (string item in expr)
Console.WriteLine(item);
...
Gruss,
M.Schindler
- 03 Oct 2005, 09:01 am
-
Hubert PetersThe company name is only visible to registered members.Re^3: Language Integrated Query (LINQ)
Hallo Herr Schindler,
was die Schleifenbildung betrifft gebe ich Ihnen vollkommen recht, ich meine
selbst wenn man zehn Jahre Datenbankschleifen programmiert hat vergist man
schon mal an .Next :-) und wundert sich dann warum es nicht funktioniert.
Ich habe in den vergangen Jahren viele Programmiersprachen benutzt unteranderm auch GemBase. Dieses ist eine SQL Hochsprache die unter anderm
eine Funktion enthält die eine Automatische Schleife generiert wenn man den
Tabllennamen mit in den Funktionsheader aufnimmt.
So etwas vermisse ich unter Delphi bzw auch als LINQ Funktion.
Aber denken Sie nicht auch das eine einfacher SQL Compiler soetwas genauso
hinbekommen würde?
Ich habe eine Workflow-Engine entwickelt die zur Designzeit alle verwendeten SQL
und SP's überprüft. Auch die verwendeten Feldname werden gegen die Abfrage
gemerged, das reicht eigentlich schon volkommen aus. Somit benötigt man
eigentlich keinen eigenen Zwischenspeicher für die Abfragen. Und bzgl. eines
while .. next konstruktes ist mir nicht klar warum die compiler dass nicht selber
umsetzten da ich ja in der while Bedingung schon auf EOF abfrage und wenn
keine ezplizietes next kommt ist es halt vom compiler immer an den schluß der while schleife zu setzen.
Ich habe mir für Arraydurchläufe eine eigene Funktion geschrieben die aus
PHP stammt und foreach heißt (Allerdings in assembler damit der rücksprung in die eigentliche schleife wieder Funktioniert). Durch den Aufruf foreach(arrayname, keyname, value) brauche ich mich auch nicht mehr um die Länge des Array's zu kümmern und erhalte den Wert und bei einem mehrdem. Array den Zeigenamen zurück.
Aber nichts destro trotz will ich nicht LINQ kapput reden, wird sich sicherlich
noch ein wenig verbessern.
- 04 Oct 2005, 1:20 pm
