2011-12-19 3 views
5

Jest to obraz przedstawiający tabelę, którą mam, b siatkę, którą muszę wyświetlić. obraz opps cant post. źle próbuję wyjaśnić. Mój stół ma cztery kolumny.Linq Do grupy SQL By and Sum

  1. Numer projektu (String)
  2. Nummer artykułu (String)
  3. Położenie (String)
  4. szt. (Real).

Moja kratka musi wyglądać tak.

  1. ProjectNumber
  2. Nummer artykułu
  3. QtyMain.
  4. QtyOther.

muszę napisać kwerendy LINQ Grupowanie evry linię więc ja se 1 Linia pr projektu/Nummer artykułu kombinacja podsumowujący Ilość na 2 differetn Colums 1 przedstawiającym z Ilość gdzie lokalizacja jest głównym i 1 pokazano Ilość gdzie lokalizacja nie jest (! =) main. Czy linq może to zrobić dla mnie, czy jak można to zrobić?

+0

To jest identyczne z (http://stackoverflow.com/questions/216513/sum-and-group -by-in-linq-sql) –

+1

Nie mogę tego zrobić, ale może dlatego, że nie znam dobrze VB. –

Odpowiedz

7
public class Foo 
{ 
    public Int32 ProjectNumber; 
    public String ItemNumber; 
    public String InventLocation; 
    public Int32 Qty; 
} 

void Main() 
{ 
    List<Foo> foos = new List<Foo>(new[]{ 
     new Foo { ProjectNumber = 1, ItemNumber = "a", InventLocation = "Main", Qty = 3 }, 
     new Foo { ProjectNumber = 1, ItemNumber = "a", InventLocation = "Main", Qty = 3 }, 
     new Foo { ProjectNumber = 1, ItemNumber = "a", InventLocation = "Sub", Qty = 2 }, 
     new Foo { ProjectNumber = 1, ItemNumber = "a", InventLocation = "Sub", Qty = 1 }, 
     new Foo { ProjectNumber = 1, ItemNumber = "a", InventLocation = "Sub2", Qty = 5 } 
    }); 

    var foo = from f in foos 
       group f by new { f.ProjectNumber, f.ItemNumber } into fGroup 
       select new { 
       ProjectNumber = fGroup.Key.ProjectNumber, 
       ItemNumber = fGroup.Key.ItemNumber, 
       QtyMain = fGroup.Where (g => g.InventLocation == "Main").Sum (g => g.Qty), 
       Rest = fGroup.Where (g => g.InventLocation != "Main").Sum (g => g.Qty) 
       }; 
    foo.Dump(); 
} 

Wpływające [? Sumy, a w grupie, przez w LINQ SQL]

IEnumerable<> (1 item) 
ProjectNumber ItemNumber QtyMain Rest 
1    a   6  8 
+1

Ty za pomoc, dokładnie to, czego potrzebowałem. THX :) –

+0

@Scarface: Nie ma za co; Cieszę się że mogę pomóc. –

+0

@Scarface: BTW, polecam (szczególnie, jeśli zaczynasz lub po prostu się go powiesić) patrząc na LINQpad. Powyższe skopiuje i wklei w tym narzędziu i pokaże Ci, jak może być użyteczny (po prostu upewnij się, że wybrałeś "Język: Program C#" nad oknem edytora –