2012-04-13 61 views
0

我有这个类:GROUP BY列表<Item>

public class Item 
{ 
    public virtual int32 Id { get; set; } 
    public virtual Previa Previa { get; set; } 
    public virtual Product Product { get; set; } 
    public virtual Int32 Quantity { get; set; } 
    public virtual Decimal Price { get; set; } 
    public virtual Decimal Total { get; set; } 
} 

,现在我需要一个查询来查找数据库中的每个项目,按产品,数量与总的总和。 为了找到每一个项目,我使用:

public List<Item> FindItem(int IdProduct = 0) 
{ 
    var retorno = (from c in Session.Query<Item>() 
        select c); 

    if (IdProduto > 0) 
     retorno = retorno.Where(x => x.Product.Id == IdProduct) 

    return retorno.ToList<Item>(); 
} 

但我不知道如何分组这些项目。有人可以帮我吗?

+3

什么是grupo?那个是从哪里来的?将这些项目分组是什么意思 - 你的意思是? – Oded 2012-04-13 12:42:00

+0

是否有许多产品具有相同的'IdProduct'? – 2012-04-13 12:44:10

+0

Oded,对不起......现实中的“grupo”是“retorno”。我编辑。 – JohnyMoraes 2012-04-13 12:54:41

回答

4

你的问题还远不清楚,但它听起来您想查询,如:

var query = from item in Session.Query<Item>() 
      group item by item.Product into g 
      select new { 
       Product = g.Key, 
       Quantity = g.Sum(item => item.Quantity), 
       Total = g.Sum(item => item.Total) 
      }; 

你再如何传递背面是一个不同的问题 - 你几乎可以肯定虽然...

+0

谢谢,是一个非常好的解决方案,但现在我怎么操纵这个?这返回一个列表?如果是的话,我如何获得列表中的每个字段? – JohnyMoraes 2012-04-13 17:36:08

+1

@JohnyMoraes:这就是为什么我说“你如何传递回来是另一回事” - 你可能想为这个分组创建一个新类型。 – 2012-04-13 19:30:18

+0

噢,是的......谢谢你的答案,我的朋友。 – JohnyMoraes 2012-04-16 11:53:40