2015-02-06 4 views
1

Мой конструктор SQL отключен в настоящее время, и мне нужно получить некоторые (что я предположил, было просто) LINQ done, я никогда не обходил этот материал, но я думал, что это будет просто достаточно, он даже оставил мне некоторый код SQL для примера, но все мои усилия потерпели неудачу.LINQ-версия SQL-группы по

То, что я пытаюсь сделать, это такое:

У меня есть список объектов OrderedItem, они содержат ItemName, quantity и PPU.

Я хочу, чтобы создать второй список из этого, только с отчетливым ItemNames, общей для quantity всех этих orderditems с этой ItemName и макс для PPU.

Чтобы убрать это, я вернулся.

Select ItemName 
     SUM(Quantity) 
     MAX(PPU) 
FROM ..... (my list) 
Group By ItemName 

Я был бы признателен за любую помощь в получении версии LINQ этого.

ответ

5
var query = from rec in dbo.TableName 
      group rec by rec.ItemName into ItemNameGroup 
      select new { 
       ItemName = ItemNameGroup.Key, 
       SumQuantity = ItemNameGroup.Sum(r => r.Quantity), 
       MaxPPU = ItemNameGroup.Max(r => r.PPU) 
      }; 
1

Я полагаю, ваш класс:

class OrderedItem 
{ 
    public string ItemName { get; set; } 
    public decimal Quantity { get; set; } 
    public int PPU { get; set; } 
} 

Тогда вы можете написать следующий LINQ запрос с методами расширения:

var objects = new List<OrderedItem>(); 
objects.GroupBy(x => x.ItemName).Select(x => new 
{ 
    ItemName = x.Key, 
    Quantity = x.Sum(y => y.Quantity), 
    PPU = x.Max(y => y.PPU) 
}); 
+0

К сожалению, мало недалекий здесь, но я предполагаю, что я бы нужно сначала заполнить этот новый список моими существующими данными? например, новый список (myList); – Ben

+0

Для заполнения списка вы можете использовать метод 'objects.Add'. Если вы используете данные базы данных, прочитайте о Entity Framework и примените тот же запрос к базе данных. –

Смежные вопросы