Linq To SQL Group By и Sum - PullRequest
       0

Linq To SQL Group By и Sum

6 голосов
/ 19 декабря 2011

Это изображение, показывающее таблицу, которую я имею, b сетку, которую мне нужно отобразить.OPS не могу опубликовать изображение.Я постараюсь объяснить.В моей таблице четыре столбца.

  1. Номер проекта (строка)
  2. ItemNumber (строка)
  3. Местоположение (строка)
  4. Кол-во (реальное).

Моя сетка должна выглядеть следующим образом.

  1. ProjectNumber
  2. ItemNumber
  3. QtyMain.
  4. QtyOther.

Мне нужно написать запрос linq Группировка каждой строки, так что я выберу 1 Line pr Комбинацию Project / ItemNumber, суммирующую qty в 2 разных столбца: 1, показывающий qty, где location является основным, и 1, показывающийКол-во, где местоположение не является (! =) основным.Может ли Linq сделать это для меня, или как это можно сделать?

1 Ответ

8 голосов
/ 19 декабря 2011
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();
}

В результате:

IEnumerable<> (1 item)  
ProjectNumber ItemNumber QtyMain Rest 
1             a          6       8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...