当前位置:编程学习 > C#/ASP.NET >>

一个关于linqtosql Group后的数据在和动态list join的问题

我有一张表AttRecords 
AttTime(datetime)    Emp(nvarchar)      Dept(nvarchar) 
2008-08-02 6:45        zhangsan              A 
2008-08-02 18:20      zhangsan                A 
2008-08-02 11:22      zhangsan                A 
2008-08-02 18:20      zhangsan                A 
2008-08-08 7:15        zhangsan                A 
2008-08-08 19:12      zhangsan                A 
2008-08-01 6:41        ww                      A 
2008-08-01 8:41        ww                      A 
2008-08-01 17:20      ww                      A 
2008-08-06 7:11        ww                      A 
2008-08-06 18:12      ww                      A 
2008-08-04 8:13        lisi                    B 
想要得到数据如下: 
即得到指定Dept(A)下的所有Emp(zhangsan,ww)的AttTime记录,并按每个人分组显示,求出每个人每天的最大时间和最小时间, 
没有记录的日期用空的补全。 

AttDate      minAttTime    maxAttTime Emp Dept 
2008-08-02    6:45        18:20      zhangsan  A 
2008-08-03    null          null      zhangsan  A 
2008-08-04    null          null      zhangsan  A 
2008-08-05    null          null      zhangsan  A 
2008-08-06    null          null      zhangsan  A 
2008-08-07    null          null      zhangsan  A 
2008-08-08    7:15          19:12    zhangsan  A 

2008-08-01    6:41          17:20      ww      A 
2008-08-02    null          null      ww      A 
2008-08-03    null          null      ww      A 
2008-08-04    null          null      ww      A 
2008-08-05    null          null        ww      A 
2008-08-06    7:11          18:12      ww      A 

我需要使用linqtosql直接对AttRecords进行操作,下面我只实现了分组统计,我不知如何才能将空日期的部分join进去?
AttDemoDataContext adc = new AttDemoDataContext();
            var attData = from a in adc.AttRecords
                          
                          group a by
                          new { a.Dept, a.Emp, Convert.ToDateTime(a.AttTime).Date } into g
                          where g.Key.Dept == 'A'                    
                          select new
                          {
                              AttDate = g.Key.Date,
                              minAttTime = g.Min(c => c.AttTime),
                              maxAttTime = g.Max(c => c.AttTime),
                              Emp = g.Key.Emp,
                              Dept = g.Key.Dept
                          };

         

            foreach (var item in attData)
            {
                Console.WriteLine(Convert.ToDateTime(item.AttDate).Date.ToShortDateString() + "\t" +
                                  Convert.ToDateTime(item.minAttTime).TimeOfDay + "\t" +
                                  Convert.ToDateTime(item.maxAttTime).TimeOfDay + "\t" +
                                  item.Emp + "\t" + item.Dept);


            }
            Console.ReadLine();

8/1/2008        06:41:00        17:20:00        ww      A
8/6/2008        07:11:00        18:12:00        ww      A
8/2/2008        06:45:00        18:20:00        zhangsan        A
8/8/2008        07:15:00        19:12:00        zhangsan        A --------------------编程问答-------------------- up --------------------编程问答-------------------- into g.DefaultIfEmpty(new AttRecords()) --------------------编程问答--------------------
引用 2 楼 qingwa008 的回复:
into g.DefaultIfEmpty(new AttRecords())

这样不行吧 --------------------编程问答-------------------- 你是不是要吧最小时间和最大时间中间的日期补上去?如果是这样的话,个人感觉应该先弄个全月份的虚拟集合,然后再left join 或 right join连接起来。 --------------------编程问答--------------------
引用 4 楼 qingwa008 的回复:
你是不是要吧最小时间和最大时间中间的日期补上去?如果是这样的话,个人感觉应该先弄个全月份的虚拟集合,然后再left join 或 right join连接起来。

是的
我是想把这个集合也写到这个查询里
不想单独弄个list
补充:.NET技术 ,  LINQ
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,