2013-09-11 2 views
0

Вот мой код:Необходимость группы LINQ к Entities Результаты

var context = new InventoryContext(); 

var res = from i in context.Inventories 
      select new FullInventory 
      { 
       InventoryID = i.InventoryID, 
       ItemModelID = i.ItemModelID, 
       ModelName = i.ItemModel.ModelName, 
       ... 
       Quantity = context.Inventories.Select(x => x.ItemModelID).Count() 
      }; 

return res.ToList(); 

код у меня прекрасно работает, однако результаты выглядят следующим образом:

CATEGORY | MANUFACTURER | MODEL | QUANTITY 
1. Hard drive | Dell   | 250GB | 2 
2. Hard drive | Dell   | 250GB | 2 

Как вы можете видеть, у меня есть 2 записи в таблице, и поскольку эти записи являются точно такими же, я бы хотел, чтобы они были сгруппированы вместе. Чтобы сгруппировать их вместе, мне нужно сгруппировать по ItemModelID, однако мне все равно нужно поместить все данные в список классов FullInventory.

Как объединить данные вместе, все еще «выбирая» данные в список классов FullInventory?

+1

Когда вы говорите «сгруппированы» вместе, вы имеете в виду вы хотите, чтобы ваш результат установлен иметь только один объект для 250 ГБ жесткий диск Dell с количеством 4? – KOTJMF

+0

KOTJMF: Да, точно. – acbarberi

ответ

1

Группу по этому значению, а затем просто выбрать свой первый элемент из каждой группы с помощью let.

var res = from inventory in context.Inventories 
      group inventory by inventory.ItemModelID into model 
      let i = model.FirstOrDefault() 
      select [...] 
+0

Ну этот код не работает. Что-то не так с группой за строкой, но я увижу, что я могу попробовать и выяснить. – acbarberi

+1

@acbarberi «Это не работает». не помогает. Не компилирует ли он, генерирует ли это исключение, является ли выход отличным от ожидаемого, если да, каким образом. Если вам нужна помощь, вам нужно предоставить подробную информацию. – Servy

+0

Ну, код неправильный, и он не будет компилироваться. Это было подчеркнуто красным цветом в Visual Studio. Это нормально, хотя я его исправил. – acbarberi

0

Вы можете использовать Distinct()

return res.Distinct().ToList() 
+0

Это не помогло. Я получил те же результаты, что и раньше. – acbarberi

1

Я бы попытаться Группировать по после получения полного списка с лямбда-выражения:

var context = new InventoryContext(); 

return (from i in context.Inventories 
     select new FullInventory 
     { 
      InventoryID = i.InventoryID, 
      ItemModelID = i.ItemModelID, 
      ModelName = i.ItemModel.ModelName, 
      ... 
      Quantity = context.Inventories.Select(x => x.ItemModelID).Count() 
     }).GroupBy(g => g.ItemModelID).ToList(); 
+0

Спасибо, но это возвращает IGroupable, и мне нужен IEnumerable acbarberi

+0

. Хотя это IGroupable, вернулись ли результаты, что вы ожидали? –

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