比如我表A中有DATE字段。我想按月分组,LINQ怎么写? 
得到的结果是 
2009-04 20 
2009-05 15 
2009-06 3 
以下是SQLselect convert(varchar(7),date,120) as calendar,count(*) as Num from A group by convert(varchar(7),date,120)

解决方案 »

  1.   

    我用了个比较笨的办法解决了就是通过截取字符串,把yyyy-MM截取出来        /// <summary>
            /// 取得根据年月统计的BlogGroup
            /// </summary>
            /// <returns></returns>
            public static Dictionary<string, int> GetCalendarGroup()
            {
                //得到结果是yyyy-MM Num
                //          yyyy-MM Num
                //          yyyy-MM Num
                // group中的item.date.ToString().Substring(6, 4) + "-" + item.date.ToString().Substring(0, 2)
                // 只是为了实现date.ToString("yyyy-MM"),其结果相同,但后者无法运行,调试显示无法排序            Dictionary<string, int> group = new Dictionary<string, int>();
                MyServerDataContext dc = new MyServerDataContext();
                var query = from item in dc.Blog
                            where item.del == false
                            group item by item.date.ToString().Substring(6, 4) + "-" + item.date.ToString().Substring(0, 2);
                foreach (var item in query) group.Add(item.Key, item.Count());
                return group;
            }
      

  2.   

    SELECT [t1].[value] AS [Year], [t1].[value2] AS [Month]
    FROM (
        SELECT DATEPART(Year, [t0].[ArchiveOutDate]) AS [value], DATEPART(Month, [t0].[ArchiveOutDate]) AS [value2]
        FROM [dbo].[Employee] AS [t0]
        ) AS [t1]
    GROUP BY [t1].[value], [t1].[value2]
    -------------------------------- 
                var bbb = from ee in pdc.GetTable<EmployeeInfo>()
                          group ee by new
                          {
                              Year = ee.ArchiveOutDate.Value.Year,
                              Month = ee.ArchiveOutDate.Value.Month
                          }
                              into gg
                              select gg;
      

  3.   

    4L的确是正确的,但怎么foreach,我不能得到我想要的结果只能得要yyyy-M,我想得到yyyy-MM就是不省略月份前面那个0,用ToString报错,说出现重复的key我是foreach到泛型里面
      

  4.   

                var bbb = from ee in pdc.GetTable <EmployeeInfo>() 
                          group ee by ee.ArchiveOutDate.Value.ToString("yyyy-MM")                          into gg 
                              select gg; 
      

  5.   

    方法“System.String ToString(System.String)”不支持转换为 SQL。 
    源错误: 
    行 215:                        group item by item.date.ToString("yyyy-MM");
    行 216:            foreach (var item in query) group.Add(item.Key, item.Count());
      

  6.   

    嗯,是会有这样的错误var bbb = from ee in pdc.GetTable <EmployeeInfo>() 
             group ee by new DateTime
                (
                  ee.ArchiveOutDate.Value.Year,
                  ee.ArchiveOutDate.Value.Month,
                  0
                )  into gg 
                select gg; foreach的时候再ToString
      

  7.   

     Select * From 表 Order By Month([youtTime])
      

  8.   

        Select Cast(Year([Date]) As varchar)+'-'+Cast(Month([Date]) As varchar) as dd ,Count(*) From 表名 Group By (Cast(Year([Date]) As varchar)+'-'+Cast(Month([Date]) As varchar))
    应该是这个!!