如何检索要列出的不同值的总和?

Sku*_*nia 4 c# asp.net-mvc linq-to-entities

支持我的应用程序的SQL表和模型与下面显示的非常相似。

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
Run Code Online (Sandbox Code Playgroud)
[Key]
public int Id {get; set;}
public string CustomerName { get; set; }
public string FruitName { get; set;}
public string Charge {get; set;}
Run Code Online (Sandbox Code Playgroud)

我想这样做是拉动明显FruitNameCharge.Sum()并显示它ToList()在我的视野。这是我尝试过的

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());
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用的原因是因为Charge需要类似这样的东西,decimal.Parse(y.Charge)但是我无法弄清楚如何在Sum()函数中做到这一点。我应该以不同的方式去做吗?

Nko*_*osi 7

奇怪的是,费用是一个字符串,但总会少一些,因为数据已经存在于列表中,因此您可以按水果名称分组,将费用提取为小数并累加该组

例如

//...

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

//...
Run Code Online (Sandbox Code Playgroud)

也可以进一步简化

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