如何将两个 LINQ 数据源合并为一个图表的 table?

How can I Merge Two LINQ DataSources into a single table for a chart?

我试图让两个请求我的 SQL 服务器计算一个月中每一天的两个不同值,并将它们放入一个 table 中以在图表中使用。

我试图用 Union 将它们合并到一个 DataSource 中,但编译失败。下面的代码在两个不同的数据源中给出了我需要的结果。

此代码为我提供了我需要的结果。

    Dim ChartDataOpen = (From a In db.Alarms _
             Where a.Generated >= FirstDayOfMonth(DateTimeNow) And a.Generated <= LastDayOfMonth(DateTimeNow) And a.IsClosed = False _
             Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
             Select New With {CalendarDate, .AlarmCount = g.Count()})

    Dim ChartDataClosed = (From a In db.Alarms _
             Where a.Generated >= FirstDayOfMonth(DateTimeNow) And a.Generated <= LastDayOfMonth(DateTimeNow) And a.IsClosed = True _
             Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
             Select New With {CalendarDate, .AlarmClosedCount = g.Count()})

这段代码是我的问题,我找不到一种聪明的方法来根据日历日期 (1/16/2015) 合并两个数据源并将它们添加到一个数据源中以在图表中使用。

    Dim ChartData = ChartDataOpen.Union(ChartDataClosed)

    RadHtmlChartAvg.DataSource = ChartData
    RadHtmlChartAvg.DataBind()

最终工作代码:

    Dim ChartData = (From a In db.Alarms _
     Where a.Generated >= FirstDayOfMonth(DateTimeNow) _
       And a.Generated <= LastDayOfMonth(DateTimeNow) _
     Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
     Select New With {
          CalendarDate,
          .AlarmCount = g.Count(),
          .AlarmOpenCount = g.Count(Function(a) a.IsClosed = False),
          .AlarmClosedCount = g.Count(Function(a) a.IsClosed = True)
          })

创建具有相同属性的 NAMED 对象:

我可以在 C# 中做到这一点。您需要转换 VB.NET

public class CalendarCount
{
     public dateTime CalendarDate {get; set;}
     public int Count {get; set;}
}

这部分我要猜 vb 语法:

Dim ChartDataOpen = (From a In db.Alarms _
         Where a.Generated >= FirstDayOfMonth(DateTimeNow) _
         And a.Generated <= LastDayOfMonth(DateTimeNow) And a.IsClosed = False _
         Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
         Select New CalendarCount With {CalendarDate, .Count = g.Count()})

Dim ChartDataClosed = (From a In db.Alarms _
         Where a.Generated >= FirstDayOfMonth(DateTimeNow) _
         And a.Generated <= LastDayOfMonth(DateTimeNow) And a.IsClosed = True _
         Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
         Select New CalendarCount With {CalendarDate, .Count = g.Count()})

我认为您想要的是一种结构,您可以在其中看到一行中的打开和关闭计数:

Dim ChartData = (From a In db.Alarms _
         Where a.Generated >= FirstDayOfMonth(DateTimeNow) _
           And a.Generated <= LastDayOfMonth(DateTimeNow) _
         Group a By CalendarDate = a.Generated.Value.Date Into g = Group _
         Select New With {
                             CalendarDate,
                            .AlarmCount = g.Count(Function(x) Not x.IsClosed)
                            .AlarmClosedCount = g.Count(Function(x) x.IsClosed)
                         })

您应该能够在每个日期用两个点或条形图绘制图表。