| 

.NET C# Java Javascript Exception

0
Ich habe zwei Tabellen die folgendermaßen aufgebaut sind:

Tabelle1: KEY | Spalte1 | Spalte2 | Spalte3
1 | wert11 | wert12 | wert13
2 | wert21 | wert22 | wert23
usw...

Tabelle2: KEY | SORT | Wertspalte
1 | a | wert1a
1 | b | wert2b
1 | c | wertNc
2 | a | wert3a
2 | b | wert4b
2 | c | wertNc
usw...

und das will ich erhalten:

KEY | Spalte1 | Spalte2 | Spalte3 | Wertspalte1a | Wertspalte2b | WertspalteNc
1 | wert11 | wert12 | wert13 | wert1a | wert2b | wertNc
2 | wert21 | wert22 | wert23 | wert3a | wert4b | wertNc

möglichst mittels einer LINQ Abfrage
News:
23.02.2010
schulz3000 390 1 6
3 Antworten
2
Dein Problem läßt sich nicht ohne weiteres lösen.
Du kannst zwar die beiden Tabellen mit einandere verjoinen, jedoch nicht so wie du das willst.

Hier eine mögliche Lösung deines Problems:
Zu erst werden die beiden Tabellen verjoined, und anschließend werden die Wertepare zusammengesetzt damit die Ausgabe, wie du sie wünschst, möglich wird:

public class Tabelle1{
public int Key { get; set; }
public string Spalte1 { get; set; }
public string Spalte2 { get; set; }
public string Spalte3 { get; set; }
}

public class Tabelle2{
public int Key { get; set; }
public string SORT { get; set; }
public string Wertspalte { get; set; }
}

Tabelle1 table1 = ...;
Tabelle2 table2 = ...;

var innerjoin = From table1 In t1
Join table2 In t2
On t2.Key Equals t1.Ke
Select t1.Key, t1.Spalte1, t1.Spalte2, t1.Spalte3, t2.Wert;

foreach (var e in innerjoin) {
Console.WriteLine(e.Key + " | " + e.Spalte1 + " | " + e.Spalte2 + " | " + e.Spalte3 + " | " + e.Wert);
}

/*
Ergebnis:
1 | wert11 | wert12 | wert13 | wert1a
1 | wert11 | wert12 | wert13 | wert2b
1 | wert11 | wert12 | wert13 | wertNc
2 | wert21 | wert22 | wert23 | wert3a
2 | wert21 | wert22 | wert23 | wert4b
2 | wert21 | wert22 | wert23 | wertNc
*/

Dictionary<int,List<string>> result = new Dictionary<int,List<string>>();

foreach (var e in innerjoin) {
if(!result.ContainsKey(e.Key)){
result.Add(e.Key,new List<string>());
result[e.Key].Add(e.Spalte1);
result[e.Key].Add(e.Spalte2);
result[e.Key].Add(e.Spalte3);
}

result[e.Key].Add(e.Wert);
}

foreach (int k in result.Keys) {
Console.WriteLine(k + " | " + String.Join(" | ",result[k].ToArray()));
}

/*
Ergebnis:
1 | wert11 | wert12 | wert13 | wert1a | wert2b | wertNc
2 | wert21 | wert22 | wert23 | wert3a | wert4b | wertNc
*/
24.02.2010
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Danke das ist das was ich gesucht habe.
Würde es auch mit dem Hacken markieren aber die Funktion geht irgendwie aktuell nicht.
schulz3000 26.02.2010
0
Ich denke das was du suchst, ist eine Join Statement, einige Beispiele findest Du hier und hier
24.02.2010
Mario Priebe 6,0k 3 9
Ein einfacher Join reicht nicht aus da dann so aussehen würde:

1 | wert11 | wert12 | wert13 | wert1a
1 | wert11 | wert12 | wert13 | wert2b
1 | wert11 | wert12 | wert13 | wertNc
2 | wert21 | wert22 | wert23 | wert3a
2 | wert21 | wert22 | wert23 | wert4b
2 | wert21 | wert22 | wert23 | wertNc

und nicht wie gewünscht:

1 | wert11 | wert12 | wert13 | wert1a | wert2b | wertNc
2 | wert21 | wert22 | wert23 | wert3a | wert4b | wertNc
Floyd 24.02.2010
0
Hi, im Prionzip geht das mit einer einzigen SQL Anweisung, wenn die Anzahl der Sort-Werte in Tabelle2 bekannt sind.

Das sieht dann in etwa so aus:
select tab1.*,tab2.sortA, tab2.sortB, tab2.sortC from (
select
id,
list(case when sort='a' then wert else null end) as sortA,
list(case when sort='b' then wert else null end) as sortB,
list(case when sort='c' then wert else null end) as sortC
from tmp_t2
group by id order by id
) tab2
join tmp_t1 tab1 using(id)


Je nach SQL-Server kann die Anweisung etwas variieren, da der Befehl fürs Concatinieren der Zeilen immer etwas anders heißt. Was benutzt du? Mysql, Postgres, MsSQL?

Grüßle
25.02.2010
Blue 321 1 5
Die Frage war nach einem LINQ Query ;)
Mario Priebe 25.02.2010

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH