Autor Beitrag
bitbyte
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 09.07.15 20:28 
Hallo an alle,

ich habe ein Problem bei dem ich irgendwie keine vernünftige Lösung finde:
Also ich habe eine vorgegebene Datenbank, daraus frage ich mit Linq die benötigten Daten ab. Das ist auch kein Problem! Leider befinden sich die gewünschten Daten in 2 verschiedenen Tabellen.

Beispiel:
Tabelle A enthält alle Werte in Zeilen! (Wert1, Wert2, Wert2, usw.)
Tabelle B enthält alle Werte in Spalten!
Wert1
Wert2
Wert3
usw.


Nun soll ich die Daten des Abfrageergebnise (Tabelle A) zu den Daten aus Tabelle B einsortieren!

Aber wie? Im Moment habe ich eine Lösung mit einer Zwischenklasse die ich mit einer foreach-Schleife mit den Daten aus Tabelle B befülle! (Keine Problem!) Aber die Daten aus Tabelle A kann ich im Moment nur in eine Liste überführen und dann wieder mit einer foreach-Schleife die Daten der Zwischenklasse einfügen!
Mein bisheriger Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
List<decimal> TestListe = new List<decimal>();
            foreach (var item in anlagen)
            {
                TestListe.Add(Convert.ToDecimal(item.Wert_1));
                TestListe.Add(Convert.ToDecimal(item.Wert_2));
                TestListe.Add(Convert.ToDecimal(item.Wert_3));
                TestListe.Add(Convert.ToDecimal(item.Wert_4));
                TestListe.Add(Convert.ToDecimal(item.Wert_5));
            }
            var ct = 0;
            foreach (var a in TestListe)
            {
                itemList[ct].Wert = Convert.ToDecimal(TestListe[ct]);
                ct += 1;
            }

Das läuft zwar aber gibt hier keine bessere Lösung?

Bin für jede Hilfe dankbar!!
Viele Grüsse!
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Do 09.07.15 21:14 
Ich versteh die Ausgangslage nicht so wirklich, besonders da die Tatsache, dass Daten in zwei verschiedenen Tabellen in einer Pivot-Form vorhanden sind, irgendwie weh tut :D

Eveentuell hilft dir aber der Tipp SelectMany weiter. Das ist auch eine Linq-Funktion, die es erlaubt durch eine Auflistung von Auflistungen zu laufen und sie zusammen zu fassen.

Du müsstest es dann ungeähr so machen:

ausblenden C#-Quelltext
1:
IEnumerable<object> newData = data.SelectMany(x => new object[] { x.Wert_1, x.Wert_2, x.Wert_3, x.Wert_4, x.Wert_5 });					


Alternativ kannst Du dir natürlich auch die Pivot-Darstellung deiner Daten erstellen, aber dafür gibt es meines WIssens nach keine fertigen Methoden. Ohne eine weitere Klasse wirst Du da auch nicht weiter kommen, außer Du nutzt anonyme Typen und das würde ich gerade bei komplexeren Daten eher vermeiden.
bitbyte Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 09.07.15 21:49 
Hallo Palladin007,

danke für Deine Antwort! Die Bezeichnung Pivot-Form trifft es sehr gut!
Nun ich soll aus den beiden Tabellen ein Grid füllen und anzeigen, in dem alle diese Daten richtig zugeordnet/angezeigt sind!(Es können noch viel mehr Daten oder Views werden) Deswegen die Frage!

Das mit SelectMany muss ich erst ausprobieren bzw. mich erst einlesen, was die Funktion genau macht und wie!

Ich hätte gerne eine einfache Funktion oder einen Lösungsweg mit dem ich solche Probleme möglichst skalierbar lösen kann!

Lg
bitbyte
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Do 09.07.15 22:27 
Das SelectMany macht dir im Grunde aus Enumerable<Enumerable<int>> ein "planares" Enumerable<int>.

So sähe deine Query ungefähr in LINQ aus:
ausblenden C#-Quelltext
1:
2:
      var testListe = anlagen.SelectMany(x => new[] { x.Wert_1, x.Wert_2, x.Wert_3, x.Wert_4, x.Wert_5 }).Select(x => Convert.ToDecimal((x)));
      var itemList = testListe.Select(d => new CoolItem {Wert = d});


Ob das noch verstehbar ist, wenn man es liest? Naja...