如何将Linq动态查询结果转换为自定义类?

Zac*_*ott 5 c# linq dynamicquery

通常,我这样做:

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() }
Run Code Online (Sandbox Code Playgroud)

但我有这样的代码:

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

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

我知道在这两者是一样的,代表整个表的记录,那我拉整条记录中只是做一个计数.我也需要解决这个问题. 编辑:Marcelo Cantos指出Linq非常聪明,不会提取不必要的数据.谢谢!

cas*_*One 2

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

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

产品的类型仍应流经并可访问,并且常规分组/过滤不应改变流经扩展方法的类型。