Vb.net 如何将两个LINQ数据源合并到一个图表的单个表中?
我正在尝试获取两个值,让我的SQL server为每个月的每一天计算两个不同的值,并将它们放在一个表中,以便在图形中使用 我试图用Union将它们合并到一个数据源中,但它无法编译。下面的代码给出了我在两个不同数据源中需要的结果 这段代码为我提供了所需的结果Vb.net 如何将两个LINQ数据源合并到一个图表的单个表中?,vb.net,linq,merge,datasource,Vb.net,Linq,Merge,Datasource,我正在尝试获取两个值,让我的SQL server为每个月的每一天计算两个不同的值,并将它们放在一个表中,以便在图形中使用 我试图用Union将它们合并到一个数据源中,但它无法编译。下面的代码给出了我在两个不同数据源中需要的结果 这段代码为我提供了所需的结果 Dim ChartDataOpen = (From a In db.Alarms _ Where a.Generated >= FirstDayOfMonth(DateTimeNow) And a.Ge
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()})
最终工作代码:
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)
})
创建具有相同属性的命名对象: 我可以用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)
})
您应该能够在图表中以每个日期两个点或两条线绘制此结果。但是如何将两个结果合并到一个源中?您是正确的,我将在一行中获取该数据。x和a没有在Select New With中声明,你能向我解释一下这部分代码吗?啊,该死,这是我的C方言。我能够理解你在做什么,并得到了它!非常感谢。使用工作代码更新OP。
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)
})