Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Linq to Sql, (where in) mit mehreren Werten
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

Linq to Sql, (where in) mit mehreren Werten

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

Funktioniert genauso.


var myList = {1, 2, 3};

var query = from item in context.Items
            where myList.Contains( item.ID )
            select item;
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

beantworten | zitieren | melden

stimmt, leider muss ich pro Datensatz 3 Werte vergleichen, nicht nur einen, wie es in deinem Beispiel der Fall ist.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers