2016-05-26 3 views
-1

私はSQLクエリを持っていますが、これはC#LINQで何が同等でしょうか?linqは日付と時間でレコードをカウントするのに相当します

SELECT CAST(DateAdded as date) AS ForDate, 
     DATEPART(hour,DateAdded) AS OnHour, 
     COUNT(*) AS Totals 
FROM [TABLE1].[dbo].[PartValues] 

GROUP BY CAST(DateAdded as date), 
     DATEPART(hour,DateAdded) 
     Order by ForDate Desc, 
     OnHour Desc 

アイデアは、このような日付とhour-でレコードを数えることである。

ForDate OnHour Totals 
2016-05-25 9 36 
2016-05-25 8 60 
2016-05-25 7 70 
2016-05-25 6 12 
2016-05-24 21 24 
2016-05-24 20 72 
2016-05-24 19 24 
2016-05-24 14 120 
+0

DateAdded' 'の種類は何ですか?日付時刻? –

+0

なぜSQL文をLINQ文に変換しようとしていますか? LINQ TO SQLを使用しようとしているのか、単にロジックを探していますか?あなたのC#オブジェクトはどこですか?このSQL文をC#アプリケーションから呼び出そうとしていますか?もっと明確にしてください。 – Mikanikal

+0

@ YacoubMassad私はそう望むでしょう。仕様には、日付または時刻の種類のいずれかを指定できます。 – Mikanikal

答えて

0

あなたはDateAdded列の日付部分を抽出するためにDbFunctions.TruncateTimeを使用することができます。このコードは動作するはずです:

var result = context.PartValues 
    .GroupBy(x => new 
    { 
     Date = DbFunctions.TruncateTime(x.DateAdded), //Extract Date only (time part is 0) 
     Hour = x.DateAdded.Hour 
    }).Select(g => new 
    { 
     g.Key.Date, 
     g.Key.Hour, 
     Total = g.Count() 
    }) 
    .ToList(); 
0

は、以下のコードを参照してください。

var results = context.partValues.GroupBy(r => 
    new DateTime(r.dateAdded.Year, 
       r.dateAdded.Month, 
       r.dateAdded.Day, 
       r.dateAdded.Hour, 0, 0), 
    (d, r) => new { date = d, totals = r.Count() }); 
+0

私はOPがLINQ to SQLを使用していると思います。この場合、LINQがクエリの中で 'DateTime'の構築を許可しているとは思いません。 –

+0

しかし、 'new {r.dateAdded.Year、r.dateAdded.Month、r.dateAdded.Day、r.dateAdded.Hour}'のように、クエリ内に匿名型を構築することができます。それはうまくいくでしょう。 –

+0

新しいdatetimeをインスタンス化できないという情報源がありますか?これまで何も見つかりません。 –

関連する問題