LINQ查询返回

3

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

年份 键 值
2011 键1 5
2011 键2 10
2012 键1 12
2012 键2 8
2013 键1 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"
    ]
  }      
]

我该如何在Key2值中添加“null”数组值,使其看起来像下面这样?
"XAxisList": [
  "2011",
  "2012",
  "2013"
],
"Data": [
  {
    "Key": "Key1",
    "Values": [
      "5",
      "12"
      "3"
    ]
  },
  {
    "Key": "Key2",
    "Values": [
      "10",
      "8",
      **null**
    ]
  }      
]

Thanks in advance for your help!


你在这里真正想做什么?确保“Values”数组始终有3个条目? - Rick S
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - scruse24
2个回答

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的值是特定的或在特定范围内,我可能会想出一个主意,但我不确定是否是这种情况。


是的,我明白。我对linq还比较新手......不确定是否有一种方法可以做到这一点。谢谢你的帮助! - scruse24

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转换为列表,使用ToList方法来获取Add方法。


谢谢您的回答。我可以尝试一下,但是想着以另一种方式组织我的查询数据。 - scruse24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接