LINQ查询返回

时间:2016-01-08 21:44:29

标签: c# sql linq

我使用highcharts显示一些数据...但由于我的查询没有以某种图表的正确格式返回数据,因此我遇到了问题。

年份关键值
2011 Key1 5
2011 Key2 10
2012 Key1 12
2012 Key2 8
2013 Key1 3

这是我的查询的一部分:

XAxisList = db.Datas.Where(w => w.CategoryID == measurementID).Select(x => x.Year).Distinct(),
Data = from d in db.Datas
       where d.CategoryID == measurementID
       group d by d.DataKey into g
       select new
                 {
                   Key = g.Key,
                   Values = g.Select(s => s.Value)
                 }

这是我的linq查询返回的内容:

"XAxisList": [
  "2011",
  "2012",
  "2013"
],
"Data": [
  {
    "Key": "Key1",
    "Values": [
      "5",
      "12"
      "3"
    ]
  },
  {
    "Key": "Key2",
    "Values": [
      "10",
      "8"
    ]
  }      
]

如何添加' null' Key2值中的数组值如下所示?

"XAxisList": [
  "2011",
  "2012",
  "2013"
],
"Data": [
  {
    "Key": "Key1",
    "Values": [
      "5",
      "12"
      "3"
    ]
  },
  {
    "Key": "Key2",
    "Values": [
      "10",
      "8",
      **null**
    ]
  }      
]

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

根据您的数据集,这根本无法完成。如果您的数据集包含以下记录

2013 Key2 null

然后就不会有任何问题。

如果您考虑以下事项,您可以理解为什么不能这样做:

group d by d.DataKey into g

你在那做什么?

您正在根据DataKey属性对记录进行分组。由于有两个不同的密钥key1key2,因此会有两个组。 key1组将有三条记录,key2组将有两条记录。

此外,我认为你无法克服这个问题。根据您的数据我可以理解,您有一些键的年度值,并且您希望使用它们来创建图表。

现在缺少key2和年2013的值。所以你认为如果你可以在相应序列的末尾添加null,一切都会好的。

{
    "Key": "Key2",
    "Values": [
        "10",
        "8",
        "null"
    ]
}

您是否考虑过错过2012年价值的情况?它会完全一样!因此,在Values数组的末尾添加null是没有任何意义的。

如果Year值具体或在特定范围内,我可以提出一个想法,但我不确定是否是这种情况。

答案 1 :(得分:1)

我会在查询后对报告或图表进行修改,否则会非常混乱:

XAxisList = db.Datas.Where(w => w.CategoryID == measurementID).Select(x => x.Year).Distinct(),
Data = //your query

int largest = Data.Values.Max(v => v.Count);
foreach(var d in Data)
{
    while(d.Values.Count < largest)
         d.Values.Add(null);
}

或类似的。您可能需要使用Values的{​​{1}}列表来获取ToList方法。