Laden...

Linq to Sql, (where in) mit mehreren Werten

Erstellt von unconnected vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.456 Views
unconnected Themenstarter:in
849 Beiträge seit 2006
vor 9 Jahren
Linq to Sql, (where in) mit mehreren Werten

verwendetes Datenbanksystem: EF6 Oracle

Hallo,

ich habe im Moment folgendes Problem:

ich habe eine Liste mit mehreren Instanzen der Klasse Position enthalten (AuftragsNr, Pos, Lfnr)

nun möchte ich zu dieser Liste Daten aus der Datenbank holen, wo die oben gen Properties auch den Primär schlüssel darstellen.

nun geht ja auf sql Basis so etwas:

select * from Table where AuftragsNr,Pos,Lfnr in ((12387123,10, 5),(12387124,11,6),(12323124,12,68))

Kann ich soetwas in linq darstellen? hab schon einige versuche mit where(data => list.Contains(data)) in Verbindung mit anoymen Klassen hinter mir. Mit Linq to Object würde das vllt auch funktionieren.. aber mit Linq to Sql?

Oder hat jemand eine ganz andere herangehensweise?

Die Liste kommt übrigens nicht aus der Datenbank, somit fallen joins beim erstellen der Liste aus.

Im Moment schicke ich für jeden eintrag einen Sql ab, was mir nicht wirklich gefällt.

Grüße

16.806 Beiträge seit 2008
vor 9 Jahren

Funktioniert genauso.


var myList = {1, 2, 3};

var query = from item in context.Items
            where myList.Contains( item.ID )
            select item;

unconnected Themenstarter:in
849 Beiträge seit 2006
vor 9 Jahren

stimmt, leider muss ich pro Datensatz 3 Werte vergleichen, nicht nur einen, wie es in deinem Beispiel der Fall ist.

P
1.090 Beiträge seit 2011
vor 9 Jahren

Wenn ich dein Problem richtig verstehe, kannst du es mit einem Join übere mehrere Variablen lösen.
Schau mal hier: MSDN Forum:join on multiple conditions.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

unconnected Themenstarter:in
849 Beiträge seit 2006
vor 9 Jahren

Hi,

das würde wahrscheinlich funktionieren, wenn beide Listen im Speicher oder in der Datenbank liegen würden. Leider habe ich die erste im Speicher und die zweite auf der Datenbank.

Ich vermute das funktioniert einfach so nicht, und ich muss einen eigenen Sql schreiben mit dynamsichen erweitern des where Strings + hinzufügen von SqlParametern.

P
1.090 Beiträge seit 2011
vor 9 Jahren

Naja Linq erstell da im entefekt auch nur eine SQL Anweisung die Ausgeführt wird.

Ich würde es einfach mal ausprobieren und mir dann man anschauen welches SQL Statment am Server ausgeführt wird.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

unconnected Themenstarter:in
849 Beiträge seit 2006
vor 9 Jahren

ja, stimmt. er baut daraus ein sql.

Aber mein Gedanke war, was soll er auf der db joinen wenn die Liste nicht in der Db ist.
Ich habs aber auch ausprobiert. Er schmeisst zwar keinen Fehler, führt das Sql aber ohne where Bedingung aus.. was bei ein paar Millionen Datensätze recht Fatal ist.

Trotzdem Danke für den Vorschlag.