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 Cross Referenz Table
steven
myCSharp.de - Member



Dabei seit:
Beiträge: 82

Themenstarter:

Linq to SQL Cross Referenz Table

beantworten | zitieren | melden

verwendetes Datenbanksystem: <SQL Server LinqToSql>

Hallöchen,

ich habe mal eine Frage ob das geht was ich vorhabe.

Ich habe 3 Tabellen siehe Anhang

Und folgende Abfrage


var querry = from to in myDB.tblTestObjects
                         join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID
                         join fa in myDB.tblFANos on r.FANoID equals fa.FANoID
                         select new
                         {
                             to.ModelNo,
                             to.ArticleSN,
                             fa.FANo
                         };

Die Abfrage liefert mir alle einträge aus tblTestObject die auch einen Eintrag in der Referenz Tabelle haben.

Kann man das so umschreiben, dass alle Einträge zurückgegeben werden auch die die keine einträge in der Referenz Tabelle haben. Bin in Linq noch nicht wirklich fit......

So z.B. Result
[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678", FANo= null} <- Kein Eintrag in der RefTabelle

bzw.

[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678"}

Geht das?
Danke schonmal und Grüße
Steven
Attachments
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Hi...

dazu gibt es im Web viele Beispiele.
Such einfach mal nach "Linq2sql left join".

lg
private Nachricht | Beiträge des Benutzers
Palin
myCSharp.de - Member



Dabei seit:
Beiträge: 1115

beantworten | zitieren | melden

Sollte mit from und DefaultIfEmpty klappen.

var querry = from to in myDB.tblTestObjects
                   from r in myDB.tblRefFaNoTestObjects.Where(c => c.TestObjectID == to.TestObjectID).DefaultIfEmpty
                         join fa in myDB.tblFANos on r.FANoID equals fa.FANoID
                         select new
                         {
                             to.ModelNo,
                             to.ArticleSN,
                             fa.FANo
                         };

Den Code hab ich jetzt nur so runter getippt. Kann sein da du noch was ändern musst.
Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern
private Nachricht | Beiträge des Benutzers
steven
myCSharp.de - Member



Dabei seit:
Beiträge: 82

Themenstarter:

beantworten | zitieren | melden

Vielen dank für eure Hilfe. Mit dem Beispiel bzw. denkanstoß hat es soweit schonmal geklappt.


 var q = (from to in myDB.tblTestObjects
                       join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID into g1
                       from fo in g1.DefaultIfEmpty()
                       group new
                       {
                           to.ModelNo,
                           to.ArticleSN,
                           to.TestObjectID,
                           fo.tblFANo.FANo,

                       }by to.ModelNo);


            foreach (var grouping in q)
            {
                TreeNode nodeFor = new TreeNode();
                nodeFor.Name = "Model";
                nodeFor.Text = grouping.Key;
                nodeFor.Tag = "Model";
                treeView.Nodes.Add(nodeFor);

                foreach (var item in grouping)
                {
                    TreeNode subitem = new TreeNode();
                    subitem.Name = "SN";
                    subitem.Text = item.ArticleSN + " (" + item.FANo+")";
                    subitem.Tag = item.TestObjectID;
                    nodeFor.Nodes.Add(subitem);

                    foreach(var item2 in item) //<- hier soll noch die FaNo ausgeben werden 
                    {

                    }

                }
            }

Aber ich brauche noch ein Tipp :-) Wie mache ich das mit verschachtelten Gruppen. Ich möcht so einen TreeView füllen. Einmal gruppieren ist kein problem nur die zweite Gruppierung bekomm ich nicht hin. D.h. Model und SN klappt nur dazu die untergruppe FaNo klappt nicht.

-Model
----SN
--------FaNo
----SN
--------FaNo
-Model
----SN


Danke und Grüße
Steven
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5974
Herkunft: Leipzig

beantworten | zitieren | melden

Hi steven,

wenn du zwei Hierarchie-Ebenen hast, dann mußt du die Daten auch zweimal gruppieren.

Ansonsten solltest du deinen Code strukturieren und keinesfalls Elemente der View im Code erzeugen. Verwende besser MVVM und das HierarchicalDataTemplate, um dein ViewModel an den TreeView zu binden.

Eventuell interessiert dich auch [Artikel] Drei-Schichten-Architektur
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers