2009-03-10 10 views
4

ユーザー名と日付時刻でカウントとグループを行うSQLクエリにLinqを書きたいと思います。私は、DateTimeを "YYYY-MMM"(つまり、2009年3月)のようにフォーマットします。Linq to Sql - DateTime形式 - YYYY-MMM(2009-Mar)

これはうまくいくと思っていましたが、Linq to SqlはToStringの "format"引数を解析できません。

  dc.MyTable 
       .GroupBy(r => new 
       { 
        Name = r.UserName, 
        YearMonth = r.SomeDateTime.ToString("yyyy-MMM") 
       }) 
       .Select(r => new 
       { 
        Name = r.UserName, 
        YearMonth = r.YearMonth, 
        Count = r.Count() 
       }) 
       .OrderBy(r => r.YearMonth) 
       .ThenBy(r => r.Name); 

誰も考えていることはありませんか?

ありがとうございました。

+0

ところで、あなたが望むのであれば、実際には流暢/拡張アプローチではなくクエリ構文でこれを書くことができます。しかし、あなたが現在のコードに満足しているなら、それをそのままの状態にしておいてください... –

+0

私は実際にクエリシンタックスよりも拡張子/ラムダの構文を好んでいます。ただ個人的な好み。 – Chad

答えて

5

は私が...不思議。 DateTimeなどを再構成するか、CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(...)を使用してください。

+0

私が "欲しかった"答えではありませんが、おそらく最も正しいと思います。 DateTimeFormat.GetMonthName(...)の使用に関するヒントをありがとう。 – Chad

+0

Curses、もう一度;) –

3

データベースで文字列に何も変えないようにします。グループr.SomeDateTime.Yearとで、年と月を順番に並べ、名前と年と月を別々に(数とともに)選択し、クライアントコードで文字列形式に投影する必要がある場合。ところで

は、私はあなたの第二OrderByThenByする必要があります疑う - 現在Nameは実際にあなたがすることにより発注している最も重要なことです。あなたがその「長い」の道をすべきではない場合は、文字列としてのフォーマットが必要な場合は、その後のUIで行う

  dc.MyTable 
      .GroupBy(r => new 
      { 
       Name = r.UserName, 
       Year = r.SomeDateTime.Year, 
       Month = r.SomeDateTime.Month 
      }) 
      .Select(r => new 
      { 
       Name = r.UserName, 
       Year = r.Year, 
       Month = r.Month, 
       Count = r.Count() 
      }) 
      .OrderBy(r => r.Year) 
      .ThenBy(r => r.Month) 
      .ThenBy(r => r.Name); 

+0

あなたは今日私の+71です - あなたは生き残るだろうと思っています; -p –