user3300195
user3300195

Reputation: 69

Linq query for group by multiple item

I have a linq query which is working fine.How can i use group by in this query.I need to group by username and itemid and i should get sum(Amount)(All are in table called 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 };

Upvotes: 1

Views: 95

Answers (2)

gericooper
gericooper

Reputation: 262

Use:

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;}
}

This way it won't be anonymous

Upvotes: 0

Jon G
Jon G

Reputation: 4164

I can't see username anywhere in your code example, but to group by Itemname and sum Amount, you would something like:

    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)
                      });

To also group by username, just generate a text key containing both values, for instance delimited by a character you know will be contained in neither.

Upvotes: 1

Related Questions