通常,我这样做:
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/