Sum和group linq

nat*_*nat 6 linq vb.net grouping

我试图自己解决这个问题,但我不得不在VB中做到这一点,这让我更加困惑.基本上我有一些物体

List<Pax> paxes;
Run Code Online (Sandbox Code Playgroud)

其中一个Pax属性是Voucher,而Voucher又有一些属性,如ID和Price

我想要做的是从Pax列表中选择一个凭证列表及其累积价格

so from 
Pax1 - Voucher{ VoucherDesc = 10 percent off, VoucherCode = 10-OFF, Price = £150}
Pax2 - Voucher{ VoucherDesc = 10 percent off, VoucherCode = 10-OFF, Price = £120}
Pax3 - Voucher{ VoucherDesc = Buy one get one free, VoucherCode = BOGOF, Price = £300}

to 
{10 percent off, 10-OFF, £270 }
{Buy one get one free, BOGO, £300 }
Run Code Online (Sandbox Code Playgroud)

我确信这可以通过一些linq和分组来实现,但我完全被难倒了

假设它是沿着的

dim newlist = from p in paxes group p by p.VoucherCode into g _ 
                select new With {g. ..} 
Run Code Online (Sandbox Code Playgroud)

是的,这必须最终在VB中,但我觉得相当痛苦,想通知我会在C#中更有意义,因为VB语法是纯粹的邪恶,如果有人可以发布两者,我可能最终能够理解这是做什么的.因为代码转换器似乎不能很好地使用扩展的linq查询.

任何帮助非常感谢

nat*_*nat 9

谢谢你的回复

设法将其转换为vb

Dim q = From v In paxes.Select(Function(p) p.Voucher).Where(Function(v) v IsNot Nothing) _
        Group v By v.OptionID, v.VoucherCode, v.Description Into Group _
        Select OptionID, VoucherCode, Description, TotalDiscount = Group.Sum(Function(v) v.Price)
Run Code Online (Sandbox Code Playgroud)

字段命名有点不同但它的工作正常lazyb的帖子和这个链接:http://msdn.microsoft.com/en-us/vstudio/bb688088.aspx


Ser*_*kiy 3

假设价格是小数或双精度(不是字符串):

\n\n
var query = from v in paxes.Select(p => p.Voucher)\n            group v by new {v.VoucherDesc, v.VoucherCode } into g\n            select new { \n                Desc = g.Key.VoucherDesc,\n                Code = g.Key.VoucherCode, \n                Total = g.Sum(x => x.Price)\n            }; \n
Run Code Online (Sandbox Code Playgroud)\n\n

更新:您的问题最初被标记为 C#,因此这是一个 C# 解决方案。希望你能把它翻译成VB。如果价格是字符串,则只需添加值的解析。例如

\n\n
Total = g.Sum(x => Double.Parse(x.Price.Replace("\xc2\xa3", ""))\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n