Результат запроса Concat и объединение другого результата в список - PullRequest
0 голосов
/ 15 марта 2019

предположим, что таблицы ниже:

tblColor:

id - name  
1 - red  
2 - blue  
3 - green 

tblProducts

id -  name  
1 - TV   
2 -  radio

tblProductColors

id - productId - colorId  
1 - 1 - 1  
2 - 1 - 2  
3 - 2 - 2  
4 - 2 - 3

тогда я могу получить запрос по EF Linq как:

name - color  
tv - red  
tv -  blue  
radio - blue  
radio - green

, но мне нужно получить:
красный, синий
синий,зеленый

я думаю, что это не очень хорошая идея, чтобы зацикливаться после запроса и составлять список
также, я думаю, должно быть быстродействие для этого решения
моя главная проблема - скорость результата

спасибо

1 Ответ

1 голос
/ 15 марта 2019

Linq's GroupBy будет то, что вы ищете.

В качестве отправной точки, чтобы получить список продуктов с соответствующими цветами ...

var results = context.ProductColors
    .Select(x => new {ProductName = x.Product.Name, ColorName = x.Color.Name})
    .GroupBy(x => x.ProductName)
    .ToList() // Needed for the string.Join since EF won't understand that.
    .Select( group => new 
    {
        ProductName = group.Key, // Product.Name
        Colours = string.Join(", ", group.Select(x=> x.ColourName)); // Colour.Names
    }).ToList();

Редактировать: чтобы избежать лишних ToList, выберите результаты в ViewModel и отформатируйте в ViewModel цвета:

public class ProductColourSummary
{
   public string ProductName { get; set; }
   public List<string> Colors { get; set; } = new List<string>();

   public string FlattenedColors
   {
       get { return string.Join(", ", Colors); }
   }
}
var results = context.ProductColors
    .Select(x => new {ProductName = x.Product.Name, ColorName = x.Color.Name})
    .GroupBy(x => x.ProductName)
    .Select( group => new ProductColorSummary
    {
        ProductName = group.Key, // Product.Name
        Colours = group.Select(x=> x.ColourName).ToList()
    }).ToList();

Затем для отображения результатов используйте result.ProductName и result.FlattensColors.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...