2016-06-08 2 views
3

Я работаю с Entity Framework 6 и SQL Server 2014.«саз» в «группе по запросу» с Entity Framework 6

мне нужно сделать группу по запросу. Это легко, но теперь мне нужен специальный случай. Вот пример, чтобы уточнить, что мне нужно.

Пример:

Table 

ID COLOR NAME 
1 red1 aaa 
2 red2 vvv 
3 green1 fff 
4 green2 ggg 
5 yellow eee 

Давайте предположим, что у меня есть группировать по цвету, НО с связью: Я хочу, чтобы сгруппировать вместе значения RED1 и Red2 в красный и green1 и green2 как зеленый.

Итак, если я GroupBy & счета запрос а, result'd быть:

Output 

    COLOR COUNT 
    red  2 
    green 2 
    yellow 1 

Возможно ли с помощью Entity Framework? Как?

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

var groupedData = MyData.GroupBy(x => x.Products.NAME).Select(g => new { Product = g.Key, Total = g.Sum(x => x.IMPORT), Quantity = g.Sum(x => x.QTY) }) ; 

UPDATE -> ВТОРОЙ СЦЕНАРИЙ

Ok для предлагаемого решения.

Можно ли создать этот выход?

Output 

    COLOR COUNT 
    red  2 
    green 2 
    yellow 1 
    allColor 5 

Итак, как вы можете видеть, я прошу вас, как добавить строку в моем запросе с совокупной Статистикой по всем строкам. Является ли это возможным?

ответ

2

Чтобы исправить это в изменении заявления LINQ:

GroupBy(x => x.Products.NAME). 

в

GroupBy(x => { if (x.Products.NAME.StartsWith("green")) return "green"; 
       if (x.Products.NAME.StartsWith("red")) return "red"; 
       return x.Products.NAME; }). 

Отвечая на ваш вопрос обновления. Вы должны объединить одну строку в свою коллекцию с итогами. просто используйте CONCAT с новым массивом с одним элементом.

var groupedData = MyData.GroupBy(x => { 
      if(x.Products.NAME.StartsWith("green")) return "green"; 
      if (x.Products.NAME.StartsWith("red")) return "red"; 
      return x.Products.NAME; }) 
      .Select(g => new { Product = g.Key, Cnt = g.Count()}) 
      .Concat(new[] { new { Product = "allColor", 
           Cnt = MyData.Count() 
           } 
          }); 
+0

Кажется просто !! Я попробую, и я дам вам знать! :) –

+0

Можете ли вы посмотреть мое редактирование в вопросе? –

+0

@PieroAlberto Я добавил запрос для этого обновления. – valex

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