2012-04-13 49 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