2015-06-17 3 views
1

У меня есть enumarable класс, обладающий следующим свойствомКак оптимизировать следующий LINQ для объекта запроса

Sku 

Itemid 

colorid 

size_id 

например:

sku1 item1 color1 size1 

sku1 item2 color2 size1 

sku2 item2 color3 size1 

здесь Код можно повторить несколько раз

Я хочу изменить структура к чему-то подобному Sku1 comma_seperated_colors comma_seperated_size

так для sku1 выход должен быть

sku1 цвет2, цвет1 size1

В настоящее время я делаю что, как

var item3 = (from iq in items2 select new { 
     iq.SKU, 
     AllColors = string.Join(",", (from i in items2 where i.SKU == iq.SKU select i.color_class).DefaultIfEmpty().ToArray()), 
     AllSizes = string.Join(",", (from i in items2 where i.SKU == iq.SKU select i.size).Distinct().DefaultIfEmpty().ToArray()) 
     }); 

, а затем выбрав уникальные артикулов. теперь это занимает очень много времени из-за необходимости многократного сканирования. Могу ли я сделать это быстрее?

Заранее спасибо

ответ

3

Ну, разве вы не могли бы использовать группу?

var item3 = items.GroupBy (m => m.SKU) 
       .Select(g => new { 
        SKU = g.Key, 
        colors = string.Join("," , g.Select(m => m.color_class) 
               .Distinct()),//you could do a .OrderBy(m => m) after the distinct 
        sizes = string.Join(",", g.Select(m => m.size) 
               .Distinct())//you could do a .OrderBy(m => m) after the distinct 
       }); 

и для результата "строка":

var result = item3.Select(m.SKU + " " + m.colors + " " + m.sizes).ToList(); 

или

var result = item3.Select(m => string.Format("{0} {1} {2}", m.SKU, m.colors, m.sizes)).ToList(); 
Смежные вопросы