6

通常,我这样做:

var a = from   p in db.Products
        where  p.ProductType == "Tee Shirt"
        group  p by p.ProductColor into g
        select new Category { 
               PropertyType = g.Key,
               Count = g.Count() }

但我有这样的代码:

var a = Products
        .Where("ProductType == @0", "Tee Shirt")
        .GroupBy("ProductColor", "it")
        .Select("new ( Key, it.Count() as int )");

我可以更改什么语法以产生相同的结果,即如何从第二个 Linq 语句中进行 Category 的投影?

我知道g是相同的并且代表整个表记录,并且我将整个记录拉入只是为了进行计数。我也需要解决这个问题。 编辑:Marcelo Cantos 指出 Linq 足够聪明,不会提取不必要的数据。谢谢!

4

1 回答 1

2

为什么你必须这样做?由于在 GroupBy 调用之后您仍然拥有所有信息,因此您可以轻松地执行此操作:

var a = Products
        .Where("ProductType == @0", "Tee Shirt")
        .GroupBy("ProductColor", "it")
        .Select(c => new Category { 
            PropertyType = g.Key, Count = g.Count() 
        });

Products 的类型应该仍然可以通过并且可以访问,并且常规分组/过滤不应该改变通过扩展方法流动的类型。

于 2010-03-29T17:24:09.690 回答