如何使用linq

时间:2016-09-08 08:22:58

标签: c# linq

我正在用一些linq查询逻辑敲打我的脑袋。

我有一些工作单清单,我会计算每周总计的项目。

下面是我的代码。

var workorder = (
 from item in result1
 where 
 GetShortDate(item.Date)>=iStartDay
 &&
 GetShortDate(item.Date) < isunday 
 && item.WorkOrderId !=null
 group item by new { item.WorkOrderId, item.Count,item.Date } into resGroup
 select new {
     OrderId = resGroup.Key.WorkOrderId,
     Count = resGroup.Key.Count,
     Date = resGroup.Key.Date
  })
  .Distinct()
  .ToList();

var weeklycount = workorder.Sum(obj => obj.Count);

听到我的result1输入:

workorderId =1 , count = 8,date = 12/12/12
workorderId =1 , count = 8,date = 13/12/12
workorderId =2 , count = 1,date = 14/12/12

根据上述逻辑,我每周都会将其作为 17 ,但我只需要 9 ,因为我的workorderId在两天内是相同的。无需关心约会。

我怎样才能实现这一点。有人指导我。

2 个答案:

答案 0 :(得分:2)

Distinct在这里不起作用,你的对象并不明显!

你需要按workorderId进行分组,并且(可能)只包括总和中的第一项

var workordersForWeek = (from item in allresult
                                 where 
                                 GetShortDate(item.Date)>=iStartDay
                                 &&
                                 GetShortDate(item.Date) < isunday 
                                 && item.WorkOrderId !=null //to eleminate weekly total, which will not have workorderid
                                 group item by new { item.WorkOrderId, item.Count,item.Date } into resGroup
                                 select new {
        workOrderId=resGroup.Key.WorkOrderId,
        Count=resGroup.Key.Count,
        Date=resGroup.Key.Date
        }).GroupBy(x => x.WorkOrderId).Sum(obj => obj.First().Count)

但正如你所看到的,现在这个组的结果是两次。这个答案可能会做你想要的,但是如果你不关心日期,可能有一种更简单的方法,包括不按日期分组。

您可能想尝试以下方面的内容:

var workordersForWeek = allresult.Where(item => GetShortDate(item.Date) >= iStartDay 
                                              && GetShortDate(item.Date) < isunday 
                                              && item.WorkOrderId != null)
                                 .GroupBy(item => item.WorkOrderId, x => x.Count);

var weeklycount = workordersForWeek.Sum(x => x.First());

未经测试,所以不是100%肯定。

实例:http://rextester.com/NLC52773

答案 1 :(得分:0)

通过查看您的查询的这一部分     新项目{item.WorkOrderId,item.Count,item.Date} 的组项目WorkOrderId 1有两个不同的日期,因此它出现两次,然后您计算两次。从分组中删除item.Date。