Использование LINQ для объединения похожих строк сгруппированных данных - PullRequest
1 голос
/ 02 марта 2012

У меня есть некоторые данные в таблице, которая выглядит так:

Recipe | Category | Email

Что я хотел бы сделать, это извлечь эти данные из источника и поместить их во что-то похожее на:

public class RecipeItem
{
   public long Recipe { get; set; }
   public long Category { get; set; }
   public List<string> Names {get; set; }
}

Группировка по идентификаторам рецептов и категорий и помещение всех электронных писем в список.

Итак, я попытался сделать что-то вроде этого:

var recipeItems =
   from entry in list
   group entry by new { entry.Recipe, entry.Category}
   into aRecipe
   select new RecipeItem()
              {
                 Recipe = aRecipe.Key.Recipe,
                 Category = aRecipe.Key.Category,
                 // ? Not sure how to stick the list of names in here
              };

list - это данные, отозванные через структуру сущностей.

Но это не совсем правильно - я думаю, что я здесь близко (возможно). Что мне здесь не хватает в этом?


Последующий:

Спасибо Aducci за разъяснения. Ответ в том, что вы можете сделать это:

Names = aRecipe.Select(x => x.Name)

и это добавит все имена, которые есть в каждой группе, в коллекцию Names для этой группы. Довольно изящный.

1 Ответ

2 голосов
/ 02 марта 2012

Я бы изменил ваш класс, чтобы он выглядел следующим образом

public class RecipeItem
{
   public long Recipe { get; set; }
   public long Category { get; set; }    
   public IEnumerable<string> Names {get; set; }      
}

А ваша ссылка на сущности запросит:

var recipeItems =
   from entry in list
   group entry by new { entry.Recipe, entry.Category}
   into aRecipe
   select new RecipeItem()
              {
                 Recipe = aRecipe.Key.Recipe,
                 Category = aRecipe.Key.Category,
                 Names = aRecipe.Select(x => x.Name)
              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...