2009-03-10 2 views
4

Username 및 DateTime에 의해 개수 및 그룹을 수행하는 SQL 쿼리에 Linq를 쓰고 싶습니다. 나는 DateTime이 "YYYY-MMM"(즉, 3 월 - 3 월)과 같이 형식화되기를 원합니다.Linq to SQL - DateTime 형식 - YYYY-MMM (2009-3 월)

나는 이것이 작동하지만 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

저주, 다시 좌절;) –

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입니다 - 당신이 살아남을 거라는 의심 - - –