我试图自己解决这个问题,但我不得不在VB中这样做,这让我更加困惑。 基本上我有一堆物体
List<Pax> paxes;
其中一个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 }
我确信这可以通过一些linq和分组来实现,但我完全被难倒了
假设它符合
的界限dim newlist = from p in paxes group p by p.VoucherCode into g _
select new With {g. ..}
是的,这必须在VB中结束,但是当我发现相当痛苦时,我想在C#中会更加理解它 然而,由于VB语法是纯粹的邪恶,如果有人可以发布两者,我可能最终能够理解它的作用。因为代码转换器似乎不能很好地使用扩展的linq查询。
任何非常感谢的帮助
答案 0 :(得分:7)
感谢回复
设法将其转换为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
答案 1 :(得分:4)
假设价格是小数或双倍(不是字符串):
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。如果price是字符串,那么只需添加值的解析。 E.g。
Total = g.Sum(x => Double.Parse(x.Price.Replace("£", ""))