7

我试图自己解决这个问题,但我不得不在 VB 中这样做,这让我更加困惑。基本上我有很多东西

List<Pax> paxes;

Pax 属性之一是 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 }

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

假设它是沿着

dim newlist = from p in paxes group p by p.VoucherCode into g _ 
                select new With {g. ..} 

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

非常感谢任何帮助

4

2 回答 2

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)

字段的名称略有不同,但在lazyb 的帖子和此链接的帮助下效果很好:http: //msdn.microsoft.com/en-us/vstudio/bb688088.aspx

于 2013-01-04T11:57:13.490 回答
3

假设价格是十进制或双精度(不是字符串):

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

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

Total = g.Sum(x => Double.Parse(x.Price.Replace("£", ""))

于 2013-01-03T15:51:23.480 回答