LINQ Group By投射到非匿名类型?

时间:2010-05-28 08:38:25

标签: c# sql linq group-by anonymous-types

我有以下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 个答案:

答案 0 :(得分:3)

编辑:好的,我完全误读了你的帖子。根据它的外观,您不希望将分组为另一种类型 - 您希望将组的每个元素投影到不同的类型。这就是我要做的事情:

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();

答案 1 :(得分:3)

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() 
    };