简体   繁体   中英

How do I retrieve a sum of distinct values to list?

The SQL table and model supporting my application is very similar to what I have displayed below.

Id | CustomerName | FruitName | Charge
_____________________________________
1  | Bob          | Banana    | 3.00 
2  | Jill         | Apple     | 2.00
3  | Bob          | Apple     | 3.00
4  | Marvin       | Banana    | 1.00
5  | Sam          | Pear      | 4.00

[Key]
public int Id {get; set;}
public string CustomerName { get; set; }
public string FruitName { get; set;}
public string Charge {get; set;}

What I would like to do is pull the distinct FruitName and the Charge.Sum() and display it ToList() in my view. Here is what I have tried

var fruitToList = (from f in db.fruit select f).ToList();    
var test = fruitToList.GroupBy(x => x.FruitName).Sum(y => y.Charge).Select(z => z.First());
return View(test.ToList());

I know that the reason why it does not work is because Charge needs to be something like decimal.Parse(y.Charge) but I cannot figure out how to do it within the Sum() function. Should I be going about this a different way?

Weird that the charge is a string, but never the less, since the data is already in a list you can group by fruit name extract the charge as a decimal and sum the group

For example

//...

var test = fruitToList
    .GroupBy(_ => _.FruitName, _ => new { Charge = decimal.Parse(_.Charge) })
    .Select(g => new Fruit {
        FruitName = g.Key,
        Charge = g.Sum(f => f.Charge).ToString()
    });

//...

Which could also be simplified even more

var test = fruitToList
    .GroupBy(_ => _.FruitName, _ => decimal.Parse(_.Charge))
    .Select(g => new Fruit {
        FruitName = g.Key,
        Charge = g.Sum().ToString()
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM