2016-07-11 12 views
1

ich eine Sammlung von gedruckten Dokumenten haben:Linq zurückgeben eindeutige Datensätze mit Anzahl der Duplikate

  • orderDetailId, submittedDate, printedCount
  • 1,1 Jan 2106,1
  • 1,1 Jan 2106,1
  • 2,3 Jan 2106,1
  • 3,5 Jan 2106,1
  • 4,6 Jan 2106,1

Ich kann alle einzigartige Datensätze mit bekommen:

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); 
} 

aber ich würde das Feld printedCount wie die Anzahl der jedes Dokument gedruckt wurde, haben:

  • 1,1 Januar 2106, 2
  • 2,3 Jan 2106,1
  • 3,5 Jan 2106,1
  • 4,6 Jan 2106,1

würde ich für jede Hilfe

Dank für die bisherigen schnellen Antworten dankbar sein, aber ich habe nicht richtig wie die Frage. Ich kann illustrieren, was ich mit etwas langsamen hässlichen Code will, aber das funktioniert nicht wirklich ;-)

private static List<OrderFields> GetUniqueJobs(IQueryable<OrderFields> jobs) 
    { 
     Guid lastOrderDetailId = Guid.Empty; 
     List<OrderFields> uniqueJobs = new List<OrderFields>(); 

     jobs = jobs.OrderBy(x => x.OrderDetailId); 
     foreach (var job in jobs) 
     { 
      Guid orderDetailId = job.OrderDetailId; 
      if (orderDetailId != lastOrderDetailId) 
      { 
       uniqueJobs.Add(job); 
      } 
      else 
      { 
       uniqueJobs[uniqueJobs.Count - 1].Printed++; 
      } 
     } 
     return uniqueJobs; 
    } 

Können Sie helfen?

Antwort

0

Sie können es erreichen mit Sum und einem anonymen Typ:

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) 
             }); 
+0

Graf ist in diesem Zusammenhang falsch. Sie müssen Sum verwenden, um die richtige Anzahl gedruckter Dokumente zu erhalten. Und Sie müssen nicht nach SubmittedDate gruppieren. – Julia

+0

@Julia danke, ich habe nicht auf PrinceCount Spalte aufgepasst. –

0

Versuchen Sie, diese

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); 
0

Sie IEnumerable verwenden könnte < KeyValuePair < int, int >>:

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; 
} 

Oder eine AnonymusType zu verwenden:

var uniqueJobs = jobs.GroupBy(x => x.OrderDetailId).Select(group => new {OrderDetailId = group.Key, printedCount = group.Sum(x => x.printedCount)}); 
Verwandte Themen