Linq返回具有重复计数的唯一记录

Linq返回具有重复计数的唯一记录,linq,grouping,Linq,Grouping,我有一套印刷文件: orderDetailId、submittedDate、printedCount 2006年1月1日1月1日 2006年1月1日1月1日 2006年1月2日,3日 2016年1月3日,5日 2016年1月4日,6日 我可以使用:获取所有唯一记录 private static IQueryable<OrderFields> GetUniqueJobs(IQueryable<OrderFields> jobs) { IQueryable

我有一套印刷文件:

  • orderDetailId、submittedDate、printedCount
  • 2006年1月1日1月1日
  • 2006年1月1日1月1日
  • 2006年1月2日,3日
  • 2016年1月3日,5日
  • 2016年1月4日,6日
我可以使用:
获取所有唯一记录

private static IQueryable<OrderFields> GetUniqueJobs(IQueryable<OrderFields> jobs)
{
        IQueryable<OrderFields> uniqueJobs = jobs.GroupBy(x => x.OrderDetailId).Select(group => group.First());<br/>
        return uniqueJobs.OrderBy(x => x.SubmittedDate);
}
private静态IQueryable GetUniqueJobs(IQueryable作业)
{
IQueryable uniqueJobs=jobs.GroupBy(x=>x.OrderDetailId)。选择(group=>group.First());
返回uniqueJobs.OrderBy(x=>x.SubmittedDate); }
但我希望printedCount字段具有每个文档的打印次数:

  • 2006年1月1日1月1日
  • 2006年1月2日,3日
  • 2016年1月3日,5日
  • 2016年1月4日,6日
如果有任何帮助,我将不胜感激

谢谢你之前的快速回答,但我没有正确回答这个问题。我可以用一些慢而难看的代码来说明我想要什么,但这实际上不起作用;-)

私有静态列表GetUniqueJobs(IQueryable jobs)
{
Guid lastOrderDetailId=Guid.Empty;
List uniqueJobs=新列表();
jobs=jobs.OrderBy(x=>x.OrderDetailId);
foreach(作业中的var作业)
{
Guid orderDetailId=job.orderDetailId;
if(orderDetailId!=lastOrderDetailId)
{
唯一作业。添加(作业);
}
其他的
{
uniqueJobs[uniqueJobs.Count-1]。打印++;
}
}
返回唯一的工作;
}

你能帮忙吗?

你可以通过求和匿名类型来实现:

var result = jobs.GroupBy(x => x.OrderDetailId)
                 .Select(group => new {
                                          // You can take the first if they are equivalent.
                                          Value = group.First(),
                                          PrintedCount = group.Sum(g => g.PrintedCount)
                                      });

您可以使用Sum匿名类型来实现它:

var result = jobs.GroupBy(x => x.OrderDetailId)
                 .Select(group => new {
                                          // You can take the first if they are equivalent.
                                          Value = group.First(),
                                          PrintedCount = group.Sum(g => g.PrintedCount)
                                      });
试试这个

    var uniqueJobs = jobs.GroupBy(x => new {x.orderDetailId, x.submittedDate})
                         .Select(group => new
                         {
                                orderDetailId = x.Key.orderDetailId,
                                submittedDate = x.Key.submittedDate,
                                printedCount = x.Sum(i => i.printedCount) // Or Count() I dont know your values.
                         });
    return uniqueJobs.OrderBy(x => x.SubmittedDate);
试试这个

    var uniqueJobs = jobs.GroupBy(x => new {x.orderDetailId, x.submittedDate})
                         .Select(group => new
                         {
                                orderDetailId = x.Key.orderDetailId,
                                submittedDate = x.Key.submittedDate,
                                printedCount = x.Sum(i => i.printedCount) // Or Count() I dont know your values.
                         });
    return uniqueJobs.OrderBy(x => x.SubmittedDate);

您可以使用IEnumerable>:

private static IEnumerable<KeyValuePair<int,int>> GetUniqueJobs(IQueryable jobs)
{
    var uniqueJobs = jobs.GroupBy(x => x.OrderDetailId).Select(group => new KeyValuePair<int, int>(group.Key, group.Sum(x => x.printedCount))).OrderBy(x => x.Key);
    return uniqueJobs;
}

您可以使用IEnumerable>:

private static IEnumerable<KeyValuePair<int,int>> GetUniqueJobs(IQueryable jobs)
{
    var uniqueJobs = jobs.GroupBy(x => x.OrderDetailId).Select(group => new KeyValuePair<int, int>(group.Key, group.Sum(x => x.printedCount))).OrderBy(x => x.Key);
    return uniqueJobs;
}

在这种情况下,计数是错误的。您必须使用Sum来获得正确数量的打印文档。您不必按SubmittedDate分组。@Julia谢谢,我没有注意PrintedCount列。在这种情况下Count是错误的。您必须使用Sum来获得正确数量的打印文档。你们不必按提交日期分组。@Julia谢谢,我在PrintedCount栏没注意。