-----------------Sqlserver表数据user--------------------------
 表结构:
 ID   UserName    CreateDate
 1      James     2010-12-01
 2      James     2010-12-01
 
3      James     2010-12-02
 4      Beans     2010-12-02
 5      Beans     2010-12-02
 6      Beans     2010-12-02
 7      Beans     2010-12-02
 8      Jsewt     2010-12-02
 9      Jsewt     2010-12-02
 10     Jsewt     2010-12-02
 11     Jsewt     2010-12-02
 
------------------需要结果--------------------------------
 CreateDate:2010/12/01(日期分组) UserCount:1(1个用户) ViewCount:2 (总共2个访问)
 CreateDate:2010/12/02(日期分组) UserCount:3(3个用户) ViewCount:8 (总共8个访问)
 
---------未实现的代码(差一个地方)-----------------------
 
//query里面是整个user的数据
 
//假设日期是2010/12/02,数据都已经按CreateDate分好了,就是UserCount这里不知道怎么写
 
var result = from p in query
              group p by p.CreateDate into g
               select new
               {
                      g.Key,//这里是按日期分组的        2010/12/02(结果对)
                          ViewCount = g.Count()//这里是2010/12/02访问总数  8 (结果对)
      UserCount =//这里怎么去除重复,然后统计结果为 3(怎么求出3??)    
                };
SQLLINQ

解决方案 »

  1.   

    试试
    UserCount =g.GroupBy(x=>x.UserName).Count()
      

  2.   


     public class TestClass
            {            public int ID { get; set; }
                public string UserName { get; set; }
                public DateTime CreateDate { get; set; }
            }
    List<TestClass> list = new List<TestClass>() 
                { 
                    new TestClass(){ ID=1,UserName="James", CreateDate= Convert.ToDateTime("2010-12-01")},
                    new TestClass(){ ID=2,UserName="James", CreateDate= Convert.ToDateTime("2010-12-01")},
                    new TestClass(){ ID=3,UserName="James", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=4,UserName="Beans", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=5,UserName="Beans", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=6,UserName="Beans", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=7,UserName="Beans", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=8,UserName="Jsewt", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=9,UserName="Jsewt", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=10,UserName="Jsewt", CreateDate= Convert.ToDateTime("2010-12-02")},
                    new TestClass(){ ID=11,UserName="Jsewt", CreateDate= Convert.ToDateTime("2010-12-02")}
                };
               var result = from p in list
                  group p by p.CreateDate into g
                   select new
                   {
                          g.Key, 
                          ViewCount = g.Count() ,
                          UserCount =g.GroupBy(x=>x.UserName).Count()
                    };
               foreach (var t in result)
                {
                    Console.WriteLine("CreateDate:" + t.Key + "\t" + "UserCount:" + t.UserCount + "\t" +"ViewCount:" + t.ViewCount);
                }