Linq按多项查询组

时间:2014-02-25 12:56:58

标签: c# linq-to-sql

我有一个linq查询工作正常。如何在此查询中使用group by。我需要按用户名和itemid分组,我应该得到总和(金额)(所有都在表中称为Carts)

          FoodContext db = new FoodContext();

          List<CartListing> fd = (from e in db.FoodItems
                              join o in db.Carts on e.itemid equals o.itemid
                             where e.itemid == o.itemid
                                  select new CartListing
                               {
                                   Itemname =e.itemname,
                                   Amount =o.amount,
                                   Price=(float)(e.price*o.amount),

                               }).ToList();
          CartModel vm = new CartModel { CartListings = fd };

2 个答案:

答案 0 :(得分:1)

我在代码示例中的任何位置都看不到username,但要按ItemnameAmount进行分组,您可以这样:

    var grouped = fd.GroupBy(
                      cl => cl.Itemname,
                      (key, group) => new CartListing
                      {
                          Itemname = key,
                          Amount = group.Sum(cl => cl.Amount),
                          Price = group.Sum(cl => cl.Price)
                      });

要按用户名分组,只需生成一个包含这两个值的文本键,例如由您知道的字符分隔。

答案 1 :(得分:0)

使用:

var grouped = fd.GroupBy((a => new { a.itemid,a.name }) into grp 
              select new MyClass
              {
                  MyProperty1=grp.key.itemid,
                  MyProperty2 =grp.Sum(x=>x.whatever)
              }

Public MyClass
{
   public string MyProperty1 {get;set;}
   public int MyProperty2 {get;set;}
}

这种方式不会是匿名的