LINQ Group By для проецирования в неанонимный тип? - PullRequest
3 голосов
/ 28 мая 2010

У меня есть следующий пример LINQ:

var colorDistribution = 
    from product in ctx.Products
    group product by product.Color
    into productColors

    select
       new 
    {
       Color = productColors.Key,
       Count = productColors.Count()
    };

Все это работает и имеет смысл.

То, чего я пытаюсь добиться, - это группировать по сильному типу вместо анонимного.

Например, у меня есть класс ProductColour, и я хотел бы сгруппировать в List<ProductColour>

Возможно ли это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 мая 2010

LinqToSql разрешает прямое проецирование группы в тип (в конце концов, группа - это просто IGrouping<T, U>, тип). Что LinqToSql не может сделать, так это перевести конструктор в SQL.

IQueryable<ProductColour> colorDistributionSql =  
    from product in ctx.Products 
    group product by product.Color 
    into productColors 
    select new ProductColour()
    { 
       Color = productColors.Key, 
       Count = productColors.Count() 
    };
3 голосов
/ 28 мая 2010

РЕДАКТИРОВАТЬ: Хорошо, я бы полностью неправильно прочитал ваш пост. Судя по всему, вы не хотите группировать по другого типа - вы хотите проецировать каждый элемент группы в другого типа. Вот что я бы сделал:

var colorDistributionSql = 
    from product in ctx.Products
    group product by product.Color
    into productColors

    select
       new 
    {
       Color = productColors.Key,
       Count = productColors.Count()
    };

var colorDistributionList = colorDistributionSql
      .AsEnumerable()
      .Select(x => new ProductColour(x.Color, x.Count))
      .ToList();
...