每小时查询一次数据
Query for data every hour
我在 sql table 中有一堆日期数据,如下所示:
2015-01-1 1:00:00, "some data"
2015-01-1 1:25:00, "some data"
2015-01-1 1:40:00, "some data"
2015-01-1 2:00:00, "some data"
2015-01-1 2:30:00, "some data"
2015-01-1 3:30:00, "some data"
.
.
.
2015-01-31 23:00:00, "some data"
2015-01-31 23:50:00, "some data"
我想要 select 每小时显示 1 月 (01) 月份数据的报告,例如,如果 2015 年 1 月 1 日这个时间没有数据 3:30:00 放空数据例如:
2015-01-1 1:00:00, "some data"
2015-01-1 2:00:00, "some data"
2015-01-1 3:0:00, "Null data"
.
.
.
2015-01-31 23:00:00, "some data"
这是我的代码:
var query = from item in repo.IonogramRepository.GetAll()
where month == item.DateTime.Month
orderby item.DateTime ascending
select new { item .DateTime,item.Data}
;
但如您所见,select 全部编辑,我每小时需要 select 数据,如果不存在,则放入空数据。有什么想法吗?
提前致谢。
我并不是最适合回答这个问题的人。但也许我能派上用场。首先,我相信你必须打电话询问你是想要一个小时内的最后一个条目还是最后一个条目。完成后,我相信您可以使用找到的技术 here
这是我在 Akont 评论的帮助下找到的解决方案:
static void Main(string[] args)
{
//Example to test, I'm working with a Database
List<Tuple<DateTime, string>> repo = new List<Tuple<DateTime, string>>(){new Tuple<DateTime, string>(new DateTime(2015,1,1,1,0,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,1,25,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,1,40,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,2,0,0),"Some Data" )};
var query = from dateTime in GenerateStaticListOfDateTime(1,2015)
join item in repo on dateTime equals item.Item1 into data
from item2 in data.DefaultIfEmpty(new Tuple<DateTime, string>(dateTime,"Null data"))
select item2;
foreach (var item in query)
{
Console.WriteLine("DateTime:{0} Data:{1} ",item.Item1,item.Item2);
}
}
public static List<DateTime> GenerateStaticListOfDateTime(int month,int year)
{
var result = new List<DateTime>();
for (int i = 1; i <= DateTime.DaysInMonth(year,month); i++)
{
for (int j = 0; j < 24; j++)
{
result.Add(new DateTime(year,month,i,j,0,0));
}
}
return result;
}
我很确定这个想法可以解释得更多一点,但这是我到目前为止所拥有的。感谢您的帮助。
我在 sql table 中有一堆日期数据,如下所示:
2015-01-1 1:00:00, "some data"
2015-01-1 1:25:00, "some data"
2015-01-1 1:40:00, "some data"
2015-01-1 2:00:00, "some data"
2015-01-1 2:30:00, "some data"
2015-01-1 3:30:00, "some data"
.
.
.
2015-01-31 23:00:00, "some data"
2015-01-31 23:50:00, "some data"
我想要 select 每小时显示 1 月 (01) 月份数据的报告,例如,如果 2015 年 1 月 1 日这个时间没有数据 3:30:00 放空数据例如:
2015-01-1 1:00:00, "some data"
2015-01-1 2:00:00, "some data"
2015-01-1 3:0:00, "Null data"
.
.
.
2015-01-31 23:00:00, "some data"
这是我的代码:
var query = from item in repo.IonogramRepository.GetAll()
where month == item.DateTime.Month
orderby item.DateTime ascending
select new { item .DateTime,item.Data}
;
但如您所见,select 全部编辑,我每小时需要 select 数据,如果不存在,则放入空数据。有什么想法吗?
提前致谢。
我并不是最适合回答这个问题的人。但也许我能派上用场。首先,我相信你必须打电话询问你是想要一个小时内的最后一个条目还是最后一个条目。完成后,我相信您可以使用找到的技术 here
这是我在 Akont 评论的帮助下找到的解决方案:
static void Main(string[] args)
{
//Example to test, I'm working with a Database
List<Tuple<DateTime, string>> repo = new List<Tuple<DateTime, string>>(){new Tuple<DateTime, string>(new DateTime(2015,1,1,1,0,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,1,25,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,1,40,0),"Some Data" ),
new Tuple<DateTime, string>(new DateTime(2015,1,1,2,0,0),"Some Data" )};
var query = from dateTime in GenerateStaticListOfDateTime(1,2015)
join item in repo on dateTime equals item.Item1 into data
from item2 in data.DefaultIfEmpty(new Tuple<DateTime, string>(dateTime,"Null data"))
select item2;
foreach (var item in query)
{
Console.WriteLine("DateTime:{0} Data:{1} ",item.Item1,item.Item2);
}
}
public static List<DateTime> GenerateStaticListOfDateTime(int month,int year)
{
var result = new List<DateTime>();
for (int i = 1; i <= DateTime.DaysInMonth(year,month); i++)
{
for (int j = 0; j < 24; j++)
{
result.Add(new DateTime(year,month,i,j,0,0));
}
}
return result;
}
我很确定这个想法可以解释得更多一点,但这是我到目前为止所拥有的。感谢您的帮助。