1
次のデータはSQLにあり、C#でTSQLからLINQに変換する必要があります。T-SQLからLinqへ:グループ内でのDATTYPEの変換
create table #sampledata
(
name nvarchar(50),
sampletime datetime,
samplevalue decimal,
block int
);
insert into #sampledata (name, sampletime, samplevalue, block) values
('ABC1235', cast('2016/01/01 10:00:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:05:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:10:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:15:00 AM' as datetime), null, 3),
('ABC1235', cast('2016/01/01 10:20:00 AM' as datetime), null, 3),
('ABC1235', cast('2016/01/01 10:25:00 AM' as datetime), null, 3),
('ABC1235', cast('2016/01/01 10:30:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:35:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:40:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:45:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:50:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 10:55:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:00:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:05:00 AM' as datetime), null, 10),
('ABC1235', cast('2016/01/01 11:10:00 AM' as datetime), null, 10),
('ABC1235', cast('2016/01/01 11:15:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:20:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:25:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:30:00 AM' as datetime), null, 13),
('ABC1235', cast('2016/01/01 11:35:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:40:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:45:00 AM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 11:50:00 AM' as datetime), null, 16),
('ABC1235', cast('2016/01/01 11:55:00 AM' as datetime), null, 16),
('ABC1235', cast('2016/01/01 12:00:00 PM' as datetime), 50.00, 0),
('ABC1235', cast('2016/01/01 12:05:00 PM' as datetime), null, 17),
('ABC1235', cast('2016/01/01 12:10:00 PM' as datetime), null, 17),
('ABC1235', cast('2016/01/01 12:15:00 PM' as datetime), null, 17),
('ABC1235', cast('2016/01/01 12:20:00 PM' as datetime), null, 17),
('ABC1235', cast('2016/01/01 12:25:00 PM' as datetime), null, 17),
('ABC1235', cast('2016/01/01 12:30:00 PM' as datetime), null, 17),
('ZYA4567', cast('2016/01/01 10:00:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:05:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:10:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:15:00 AM' as datetime), null, 3),
('ZYA4567', cast('2016/01/01 10:20:00 AM' as datetime), null, 3),
('ZYA4567', cast('2016/01/01 10:25:00 AM' as datetime), null, 3),
('ZYA4567', cast('2016/01/01 10:30:00 AM' as datetime), null, 3),
('ZYA4567', cast('2016/01/01 10:35:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:40:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:45:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:50:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 10:55:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:00:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:05:00 AM' as datetime), null, 9),
('ZYA4567', cast('2016/01/01 11:10:00 AM' as datetime), null, 9),
('ZYA4567', cast('2016/01/01 11:15:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:20:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:25:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:30:00 AM' as datetime), null, 12),
('ZYA4567', cast('2016/01/01 11:35:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:40:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:45:00 AM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 11:50:00 AM' as datetime), null, 15),
('ZYA4567', cast('2016/01/01 11:55:00 AM' as datetime), null, 15),
('ZYA4567', cast('2016/01/01 12:00:00 PM' as datetime), 50.00, 0),
('ZYA4567', cast('2016/01/01 12:05:00 PM' as datetime), null, 16),
('ZYA4567', cast('2016/01/01 12:10:00 PM' as datetime), null, 16),
('ZYA4567', cast('2016/01/01 12:15:00 PM' as datetime), null, 16),
('ZYA4567', cast('2016/01/01 12:20:00 PM' as datetime), null, 16),
('ZYA4567', cast('2016/01/01 12:25:00 PM' as datetime), 40.00, 0),
('ZYA4567', cast('2016/01/01 12:30:00 PM' as datetime), 50.00, 0)
この私が、このデータに対して実行するために使用していますT-SQLをグループ化変換するのは非常に簡単でした
select
name,
min(sampletime) as startdate,
max(sampletime) as enddate
from #sampledata where samplevalue is null
group by
name, block
having datediff(minute, min(sampletime), max(sampletime)) >= 5
order by name, startdate
を設定するしかし私は、次のhaving句に取り組む方法がわからないと、より具体的に集約
having datediff(minute, min(sampletime), max(sampletime)) >= 5
を使用してC#でDateDiff関数をどのように扱うかこれは私がこれまで持っているものです。
var query = (from s in sampledata
where s.block.HasValue == false
group b by new { Name = s.Name, Block = b.Block } into g
select new
{
Name = g.Name,
StartDate = g.Min(a => a.SampleTime),
EndDate = g.Max(a => a.SampleTime)
});
ので、あなたはすでにGROUP BYを作成するためにLINQを持っていますか?私はあなたの進歩の手段は、あなたがそれをやったかどうかによって決まると思います。http://devkimchi.com/211/playing-group-by-and-having-clauses-with-linq/ LINQを見ることができますか? – Cato
何をしたのですか?そして、btw、LINQは広すぎます。 LINQ to Sql?エンティティへのLINQ?または? –
質問を編集し、これまでのコードを追加しました。ありがとうございました。 –