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栏没注意。