myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » Linq Abfrage liefert beim Filtern falsches Ergebnis
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Linq Abfrage liefert beim Filtern falsches Ergebnis

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
tristar
myCSharp.de-Mitglied

Dabei seit: 30.11.2016
Beiträge: 52
Entwicklungsumgebung: Visual Studio 2010


tristar ist offline

Linq Abfrage liefert beim Filtern falsches Ergebnis

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwendetes Datenbanksystem: <MySQL>

Guten Morgen,
ich habe folgende Abfrage, bei der eigentlich nur die Daten angezeigt werden sollen,
-wo der Bestand > 0
-Preis geprüft = true
-Bestand gezählt = true
ist.

In der Ausgabe erscheinen leider aber alle Datensätze, deren Bestand gezählt wurde, aber noch kein Preis geprüft wurde.
Was ist an meiner Abfrage falsch??

C#-Code:
var total =
                                        (from i in ctx.tblInventurLager
                                         join p in ctx.TblPreise on i.artikelnummer equals p.artikelnummer
                                         where i.gezaehlt == true
                                         where p.preisgeprueft == true
                                         where i.inventurid == iIdInventur
                                         where i.bestand > 0
                                         orderby i.artikelnummer
                                         group i by i.artikelnummer into Nummer
                                         select new Inventur
                                         {
                                             Artikelnummer = Nummer.Key,
                                             Bestand = (double)Nummer.Sum(x => x.bestand)
                                         }).ToList();
02.12.2019 07:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.364
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich bin nicht ganz fit in LINQ aber die einzelnen where Anweisungen sollten wohl per && als And verknüpft werden.
Dann sollte deine Abfrage funktionieren oder?

C#-Code:
var total = (from i in ctx.tblInventurLager
            join p in ctx.TblPreise on i.artikelnummer equals p.artikelnummer
            where i.gezaehlt == true &&
            p.preisgeprueft == true &&
            i.inventurid == iIdInventur &&
            i.bestand > 0
            orderby i.artikelnummer
            group i by i.artikelnummer into Nummer
            select new Inventur
            {
                Artikelnummer = Nummer.Key,
                Bestand = (double)Nummer.Sum(x => x.bestand)
            }).ToList();

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 02.12.2019 09:07.

02.12.2019 09:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
Ich bin nicht ganz fit in LINQ aber die einzelnen where Anweisungen sollten wohl per && als And verknüpft werden.

Das macht kein Unterschied.
Im Prinzip ist sein Ansatz ein Filter auf ein Filter auf ein Filter. Sollte exakt das gleiche Ergebnis wie && liefern, was eben mehrere Abfragen in einem Filter sind.

Die Lesbarkeit empfiehlt prinzipiell auch seine Schreibweise.
02.12.2019 09:40 Beiträge des Benutzers | zu Buddylist hinzufügen
tristar
myCSharp.de-Mitglied

Dabei seit: 30.11.2016
Beiträge: 52
Entwicklungsumgebung: Visual Studio 2010

Themenstarter Thema begonnen von tristar

tristar ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leider wird immer noch nicht korrekt gefiltert.
Der Teil der Preisprüfung p.preisgeprueft == true && scheint ignoriert zu werden.

Ich habe Artikel, die nur gezählt werden oder wo der Bestand 0 ist. Diese werden korrekterweise nicht angezeigt.
Muss ich die Tabellen anderst verknüpfen?

Edit:
Nun habe ich für die Preistabelle ebenfalls noch die Id mit in die Bedingung aufgenommen und nun klappt es. Vielen Dank für die Hilfe!

C#-Code:
....
i.inventurid == iIdInventur &&
p.inventurid == iIdInventur &&
...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tristar am 02.12.2019 11:54.

02.12.2019 11:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.236
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Aktuell führst Du Deinen Inner Join auf die Artikelnummer.

Willst Du den Inner Join nur auf der ID haben, oder auf ID und Artikelnummer?
Deine jetzige Anpassung ist mit den Conditions im Startpost gar nicht erwähnt.

Willst Du beides haben, dann kannst Du folgendes schreiben:

C#-Code:
from i in ctx.tblInventurLager
join p in ctx.TblPreise
on { i.artikelnummer, i.inventurid}  equals { p.artikelnummer, p.inventurid }
02.12.2019 12:54 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 07.12.2019 18:17