你怎么能在linq to sql中做多个“group by's”?
您能否以linq查询语法和linq方法语法向我展示。
由于
编辑。
我说的是多个参数,分别按“性别”和“年龄”进行分组。
此外,我忘了提及在我将它们分组之前我怎么说加起来。
如果我有这个例子我将如何做到这一点
表产品
产品编号 产品名称 ProductQty ProductPrice
现在想象一下,无论出于什么原因,我都有大量行,每行都有相同的ProductName,不同的ProductQty和ProductPrice。
我如何通过产品名称填充下边缘并将ProductQty和ProductPrice加在一起?
我知道在这个例子中,为什么一行一行地使用相同的产品名称,但在我的数据库中它有意义(它不是产品)可能没有任何意义。
答案 0 :(得分:5)
要按多个属性进行分组,您需要创建一个新对象以进行分组:
var groupedResult = from person in db.People
group by new { person.Sex, person.Age } into personGroup
select new
{
personGroup.Key.Sex,
personGroup.Key.Age,
NumberInGroup = personGroup.Count()
}
道歉,我没有看到你的最终编辑。我可能会误解,但如果你总结年龄,你就不能把它归为一类。您可以按性别分组,总计或平均年龄......但您不能在一个声明中同时按性别和总计年龄进行分组。有可能使用嵌套的LINQ查询来获得任何给定性别的总和或平均年龄......但是更复杂。
编辑:
要解决您的具体问题,它应该非常简单明了。您只按名称进行分组,因此其余部分是基本的(示例使用服务和具体的dto类型更新):
class ProductInventoryInfo
{
public string Name { get; set; }
public decimal Total { get; set; }
}
class ProductService: IProductService
{
public IList<ProductInventoryInfo> GetProductInventory()
{
// ...
var groupedResult = from product in db.Products
group by product.ProductName into productGroup
select new ProductInventoryInfo
{
Name = productGroup.Key,
Total = productGroup.Sum(p => p.ProductCost * p.ProductQty)
}
return groupedResult.ToList();
}
}