none
请教普通select与group by select的concat问题 RRS feed

  • 问题

  • 有一个DataTable记录了一个月内每天机组-产量数据,想得出“机组-当日产量-月平均产量”的结果集,代码如下

    var tmmirv6Res = from q in dsIron.TMMIRV6
                                 where q.WORK_DATE == this.DatePicker1.SelectedDate.ToString("yyyyMMdd")
                                 select new
                                 {
                                     ProductName = q.UNIT_NO,
                                     CurrentDayAct = Convert.ToInt32(q.ZS_OUTPUT)
                                 };
    
                var tmmirv6Sum = from q in dsIron.TMMIRV6
                                 where q.WORK_DATE.Substring(0, 6) == this.DatePicker1.SelectedDate.ToString("yyyyMMdd")
                                 group q by q.UNIT_NO into g
                                 select new
                                 {
                                     ProductName = g.Key,
                                     CurrentMonthAccAct = g.Sum(p => p.ZS_OUTPUT)
                                 };

    想使用concat把两个结果集连接下,但是发现不行,有什么其他简单点的好办法吗?


    Become a .net Nanja

    2014年5月3日 7:35

答案

  • 楼主可以尝试下写在一个query里,对同一个表进行不同的查询,一个group by,一个不需要,然后用join语法以ProductName字段为条件连起来,你可以看下我做的下面的一个例子:
    这是TSQL:

    select B.OrderID ProductName,B.OrderDetailID CurrentDayAct ,C.CurrentMonthAccAct  from OrderDetail B join 
    
    (select A.OrderID ProductName,SUM(A.OrderDetailID) CurrentMonthAccAct  from OrderDetail A
    
    group by A.OrderID) C on B.OrderID=C.ProductName
    

    对应的LINQ:

    using (DFDBEntities db = new DFDBEntities())
    
                {
    
                    var result = (from odfirst in db.OrderDetails
    
                                  group odfirst by odfirst.OrderID into odgouprby
    
                                  select new { ProductName = odgouprby.Key, CurrentMonthAccAct = odgouprby.Sum(o => o.OrderDetailID) } into odnew
    
                                  join odsecond in db.OrderDetails on odnew.ProductName equals odsecond.OrderID
    
                                  select new { ProductName = odsecond.OrderID, CurrentDayAct = odsecond.OrderDetailID, CurrentMonthAccAct = odnew.CurrentMonthAccAct }).ToList();
    
                }
    

    2014年5月5日 5:52
    版主