2016-10-11 4 views
0

日時形式についての時間形式のみでグループを使用する方法を知りたい。Linqで時刻形式のみでグループ化する方法

select CONVERT(VARCHAR(10), a.tempDay, 108) as returnDay, b.qty from table1  as a inner join table2 as b on (a.id = b.id) 
where a.id = 100 
group by CONVERT(VARCHAR(10), a.tempDay, 108), b.qty 

実は、tempDayはDateTimeのタイプがある(YYYY-MM-DD HH:MM:SS)。 "HH:MM:SS" のLINQとフォーマットを、この場合、私はちょうどだけでgrouppingたいです。

+0

試しましたか? –

+0

* times *を比較するときに文字列に変換しないでください。時刻の値を取得するには 'cast(tempday as time)'を使ってください。また、インデックスに追加できる時間に別の列を作成することもできます。 –

答えて

1
var datesByTime = from d in dates 
        group d by d.TimeOfDay.ToString(@"hh\:mm\:ss") into g 
        select new { Time = g.Key, Dates = g.ToList() }; 

日付は日時の集合体である、日時は、その日ののTimeSpan、あなたがTIMEOFDAYすることにより、グループをしなければならないすべてを返すTIMEOFDAYプロパティを持っています。 また、ミリ秒を削除するには、.ToString(@ "hh:mm:ss")が必要です。

+0

オリジナルのSQL文は、* LINQ文を反映するように書き直す必要があります。 'キャスト(時刻としての時代) 'でグループ化し、テキスト変換を避けてください。 –

+0

var datesByTime =日付dからd グループdによってd.ToLongTimeString()をg new {Time = g.Key、Dates = g.ToList()}を選択します。 – Cogent

+0

'entity-framework'タグに気付きましたか? LINQ to Entitiesでは、これは優れたLINQ to Objectsソリューションですが、有名な「NotSupportedException」 - *「LINQ to Entitiesでは指定されたタイプのメンバー 'TimeOfDay'がサポートされていません」* –

関連する問題