Dynamische Where-Klausel über relationale Tabellen mit LINQ to SQL
Brauche ich Hilfe für eine dynamische where-Klausel über relationale Tabellen (eine von vielen) in LinqToSql.
Benutzer wählen Sie die Bedingungen aus Seite. (es gibt 4 Eingänge, die Benutzer wählen Sie die Klauseln)
Zum Beispiel Firma und CompanyTitle aus der Tabelle Kunde und Bestelldatum und ShipCity Aus der Order-Tabelle.
Aber Benutzer kann wählen Sie einen oder viele von Ihnen von der Seite - Schnittstelle und dynamische Abfrage generiert am codebehind und wählen Sie Aus LinqToSql.
Können Sie geben eine ähnliche Art von Beispiel von einer anderen web-Seiten.
InformationsquelleAutor | 2009-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie auf der Suche nach etwas wie diesem, wo Sie definieren die "base" - Abfrage, und dann auswerten, Parameter bestimmen, ob eine where-Klausel ist geeignet?
Bemerkte ich in einem Ihrer Kommentare, die Sie erwähnt Ihre Tabellen sind nicht verbunden durch einen foreign key? Ich bin mir nicht sicher, wie Sie Holen Sie sich eine eins-zu-viele-Beziehung, ohne irgendeine Art von referenzieller Integrität oder Beziehung?
Nein, es wird nur ausgeführt wird, das wählen Sie, wenn Sie führen so etwas wie ein ToList(), Count (), etc.
Um zu klären, - die Datenbank wird die Rücksendung der Daten und der DB-client wird der filter durch die Reihen. Dies unterscheidet sich von der übergabe in der WHERE-Klausel, um die DB und gibt die gefilterten Daten an den DB-client. Der obige code wird der ehemalige somit gegebenenfalls senden eines viel mehr Daten von DB zu DB-client als unbedingt notwendig.
Nein, tut es nicht. Ich habe gerade getestet, diese (wieder) zu überprüfen. Die tatsächliche SELECT-Befehl nicht ausgeführt, bis Sie eine Aktion ausführen, das erfordert eine Ergebnis wie .ToList(). Wenn Sie mir nicht glauben befestigen Sie die SQL Profiler und sehen Sie selbst.
InformationsquelleAutor RobS
Check-out-ScottGu ' s blog auf die dynamische linq-library. Ich denke, es wird helfen.
Hier ist ein Beispiel einer Abfrage, die trifft sowohl für die Kunden und die Tabelle Bestellungen:
Die obige Abfrage kam von der C# - Beispiele für Visual Studio. Download und schaue in den \LinqSamples\DynamicQuery Ordner und finden Sie weitere Beispiele.
InformationsquelleAutor Aaron
Hängt davon ab, wie dynamisch soll es sein - wie die anderen schon vorgeschlagen, das System.Linq -.Dynamic namespace fügt einige nette Funktionen für das erstellen von Abfragen, in denen Personen/Mitglieder (Tabellen/Spalten), die involviert sind, nicht zur design-Zeit bekannt. In diesem Fall klingt es wie Sie die Personen und Mitglieder, die involviert sind, bereits bekannt, und Sie brauchen nur ein wechseln zwischen verschiedenen Bereichen, wie Sie die where-Klausel Kriterien. Hier ist ein Beispiel:
Das obige Beispiel nicht in eine single static SQL-Abfrage. L2S wertet die Teile, die ausgewertet werden können client-Seite und generiert eine SQL-Abfrage, die nur die Teile, die ausgewertet werden müssen, die von der Datenbank. Wenn z.B. die companyName-parameter null ist, wird der name des Unternehmens Teil wird es nie schaffen, um die SQL-where-Klausel. Dies ist eines der schönen Dinge in Linq-to-SQL.
InformationsquelleAutor KristoferA
Raubt geliefert, was ich denke, ist die attraktivste Lösung. Dies ist jedoch die Methode, die ich mit war, aber dann erkannte ich, dass es tatsächlich ausführen der ersten Abfrage in voller Höhe (Linq-To-SQL) und dann die nachfolgenden .Wo () - Klauseln durchgeführt werden, mit nur LINQ. Das ist also keine praktikable Lösung, da der gesamte Satz von Daten aufgezählt und dann herausgefiltert aftwerwards in Erinnerung.
Bitte korrigieren Sie mich, wenn ich falsch Liege - aber das ist, was ich mitbekommen habe.
InformationsquelleAutor Josh M.