如何在null返回0值时制作数组以使用Linq在Chart JS上制作Chart

时间:2019-12-31 00:58:48

标签: arrays json asp.net-core chart.js

今天,我使用chartJS制作了一些图表。 图表工作正常,但是有些遗漏。 我有3个月的数据,一个月可能有一些数据为null(计数)。也许那是我的数据

Month Data1  |  Month Data2  |  Month Data3
1      2     |  1      0     |  1      2
2      4     |  2      2     |  2      2
3      1     |  3      1     |  3      0

修改

我在桌子上的数据

Month Data1  Status  |  Month Data2  Status  |  Month Data3  status
1      2     all     |  1      0      1       |  1      2      2
2      4     all     |  2      2      1       |  2      2      2
3      1     all     |  3      1      1       |  3      0      2

我从该查询中分组所获得的月份

var SelectQuery = _Context.MyTable
                .Where(a => a.Date.Value.Year == DateTime.Now.Year)
                **.GroupBy(a => a.Date.Value.Month)**
                .Select(b => new
                {
                    Date = b.Key,
                    Count = b.Count() 
                });

结束编辑

我首先从db中选择日期,然后使用distinc将其设为月份 第二步,我选择“数据”并使用过滤条件。这样的选择查询。

var SelectQuery = _Context.MyTable
                .Where(a => a.Date.Value.Year == DateTime.Now.Year)
                .GroupBy(a => a.Date.Value.Month)
                .Select(b => new
                {
                    Date = b.Key,
                    Count = b.Count() 
                });

然后要制作数组数据,我选择SelectQuery variabel并像这样计数该数据

var MyCountSelect = SelectQuery.Select(a => a.Count).ToArray();

然后我像这样使用JSON返回数据

return new JsonResult(new { myDate = date, myCount = MyCountSelect});

修改

我从该查询中获得的日期

var date = _Context.MyTable.Where(a=>a.Date.Value.Year == DateTime.Now.Year).Select(a => a.Date.Value.Month).Distinct().DefaultIfEmpty().ToList();

编辑结束

另外,我有3个选择查询,像上面那样制作数组。

当我看到json返回时,数据将像这样

Month  |  Data1  |  Data2  |  Data3
1      |   2     |   2     |   2
2      |   4     |   1     |   2
3      |   1     |         |

我的问题,如何使数组像

Month  |  Data1  |  Data2  |  Data3
1      |   2     |   0     |   2
2      |   4     |   2     |   2
3      |   1     |   1     |   0

谢谢

1 个答案:

答案 0 :(得分:0)

首先将月份的variabel设置为

var months = Enumerable.Range(1, 12);

更改此代码

var SelectQuery = _Context.MyTable
                .Where(a => a.Date.Value.Year == DateTime.Now.Year)
                .GroupBy(a => a.Date.Value.Month)
                .Select(b => new
                {
                    Date = b.Key,
                    Count = b.Count() 
                });

输入此代码

 var SelectQuery = (from p in _Context.MyTable
            where p.Date.Value.Year == DateTime.Now.Year
                         group p by new { p.Date.Value.Month } into g
                         select new { g.Key.Month, Count = g.Count() }).ToArray();

最后更改此代码

var MyCountSelect = SelectQuery.Select(a => a.Count).ToArray();

输入此代码

string[] MyCountSelect = (from month in months
                                from p in SelectQuery.Where(x => month == x.Month).DefaultIfEmpty()
                                select p == null ? "0" : p.Count.ToString()).ToArray();

,结果为空时,数组可以给出0值