Laden...

Linq to SQL Cross Referenz Table

Erstellt von steven vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.877 Views
S
steven Themenstarter:in
79 Beiträge seit 2006
vor 7 Jahren
Linq to SQL Cross Referenz Table

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

M
402 Beiträge seit 2005
vor 7 Jahren

Hi...

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

lg

P
1.090 Beiträge seit 2011
vor 7 Jahren

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

S
steven Themenstarter:in
79 Beiträge seit 2006
vor 7 Jahren

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

5.657 Beiträge seit 2006
vor 7 Jahren

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