J'ai une table dans une base de données qui stocke une valeur de données et une étiquette à deux niveaux.Groupe LinqPar projection avec plusieurs groupes
Data
{
int ID,
string Label,
string Section,
double Value
}
Un exemple d'entrée, pour illustrer mon problème:
{"Sport", "", 12}
{"Sport", "Baseball", 33}
{"Sport", "Football", 44}
{"Food", "", 34}
{"Food", "Pizza", 56}
{"Food", "Donuts", 19}
Je voudrais être en mesure d'imprimer les valeurs comme ceci:
Sport | 12
Baseball | 33
Football | 44
Food | 34
Pizza | 56
Donuts | 19
C'est le code I avoir cela accomplit comme 50% de ce que je veux:
var first = (from d in db.Data
where d.ID= PARAM
select d);
var row = first.GroupBy(x => x.Label);
foreach (var k in row)
{
Console.Write(k.Key + "\t|");
foreach (var j in k)
{
Console.Write(j.Data);
}
Console.Write("\n");
}
Mais se contente d'afficher:
Sport | 12
Sport | 33
Sport | 44
Food | 34
Food | 56
Food | 19
Je comprends pourquoi, je ne sais pas comment accéder à l'attribut .Section
de la partie k.key
. Comment puis-je utiliser linq pour obtenir la sortie souhaitée?
Je l'ai au travail:
ligne var = first.GroupBy (x => new {x.Label, x.Section});
foreach (var k in row)
{
Console.Write(k.Key.Section == null || k.Key.Section == "" ? k.Key.Label : k.Key.Section);
...
}
Nouvelle question:
Comment puis-je détecter le bord du "Sport"/"Food." Je veux insérer un diviseur (------------);
Votre exemple de sortie ne correspond pas à votre code. – dtb