2016-10-21 4 views
0

Ich habe eine Frage, für die ich brauche Vorschläge in Bezug auf: Ich habe eine Tabelle (CurrentItems) mit Spalten: ID, ChangedTime, Status, ItemType, CompanyCount minus Graf in GroupBy in Linq

Die Spalte-Status enthält eine Zahl, wo 1 bedeutet hinzugefügt und 3 bedeutet entfernt
Ich muss die Gesamtzahl der Elemente zu einem bestimmten Zeitpunkt für eine bestimmte Firma zählen. Jeder Elementtyp kann mehrmals hinzugefügt werden.

Beispieltabelle enthält:

1. Company A add(1) Item 1 at 2001-01-01 
2. Company B add(1) Item 1 at 2001-02-01 
3. Company A removes(3) Item 1 at 2001-03-01 
4. Company B add(1) Item 1 at 2001-04-01 
5. Company B removes(3) Item 1 at 2001-05-01 
6. Company A add(1) Item 1 at 2001-06-01 
7. Company A add(1) Item 1 at 2001-07-01 
8. Company B removes(3) Item 1 at 2001-08-01 

Wenn ich mir anschaue, 2001-05- dann sollte das Ergebnis

Company A totalitems on date: 0 
Company B totalitems on date: 1 

sein, wenn ich bei 2001-08- aussehen Das Ergebnis sollte

Company A totalitems on date: 2 
Company B totalitems on date: 0 
sein

Die Lösung wäre schön in einer Lambda-Anweisung zu haben, wenn es möglich ist.

Wie weit bin ich gekommen?

CurrentItems.Where(o=> (o.Status==1 || Status==3) && o.UpdatedTime < 
    DateTime.Parse("2001-08-02") &&o.Company="A").GroupBy(z=>z.Status) 
    .Select(z=> new 
    { 
    Name=z.Key, 
    Summa=z.Count(), 
    } 
... 

Wenn ich dies in SQL ausführen würde ich zwei Auswahl der Nutzung eines von einem anderen subtrahieren, aber ich denke, dass es möglich ist, es in einer kompakteren Weise in LINQ zu schreiben.

Antwort

1

Sie können etwas tun:

CurrentItems.Where(o=> o.UpdatedTime < DateTime.Parse("2001-08-02") 
    .GroupBy(z=>z.Company) 
    .Select(z=> new 
    { 
     Name=z.Key, 
     Summa=z.Where(i => i.Status == 1).Count() - z.Where(i => i.Status == 3).Count() 
    }); 

Es wird Ihnen die Summe für jedes Unternehmen geben.

+0

Beachten Sie, dass Sie 'Where (lambda) .Count()' in "Count (Lambda)" ändern können. – juharr

+0

Ja, du hast Recht, nur die Sitten, ich sehe es klarer, wenn es die Wo-Klauseln gibt, da es näher an SQL ist. – Gusman