通常,我这样做:

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和g都是相同的,它们代表整个表记录,并且我只是为了计数而拉整个记录。我也需要解决这个问题。编辑:马塞洛·坎托斯(Marcelo Cantos)指出,Linq足够聪明,不会提取不必要的数据。谢谢!

最佳答案

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

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

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

关于c# - 如何将Linq动态查询结果转换为自定义类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2536137/

10-12 07:32
查看更多