我在数据库中有一个存储数据值和两个分层标签的表。
Data
{
int ID,
string Label,
string Section,
double Value
}
示例条目,用于说明我的问题:
{"Sport", "", 12}
{"Sport", "Baseball", 33}
{"Sport", "Football", 44}
{"Food", "", 34}
{"Food", "Pizza", 56}
{"Food", "Donuts", 19}
我希望能够打印出这样的值:
Sport | 12
Baseball | 33
Football | 44
Food | 34
Pizza | 56
Donuts | 19
这是我所拥有的代码,就像我想要的那样50%:
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");
}
但这只是打印出来:
Sport | 12
Sport | 33
Sport | 44
Food | 34
Food | 56
Food | 19
我理解为什么,我只是不知道如何从.Section
部分访问k.key
属性。
如何使用linq实现我想要的输出?
我得到了它的工作:
var row = 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);
...
}
新问题:
如何检测“运动”/“食物”的边缘。我想插入一个divider(------------);
答案 0 :(得分:2)
foreach (var group in groups)
{
foreach (var item in group)
{
string label = !string.IsNullOrEmpty(item.Section)
? item.Section
: item.Label;
Console.WriteLine("{0,-8} | {1}", label, item.Data);
}
Console.WriteLine("-------------");
}
应该打印
Sport | 12 Baseball | 33 Football | 44 ------------- Food | 34 Pizza | 56 Donuts | 19 -------------