7

私はこれを自分で整理しようとしましたが、VBでそれをしなければならず、それは私をさらに混乱させます。基本的に私はたくさんの物を持っています

List<Pax> paxes;

Paxプロパティの1つは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

価格が10進数または2倍(文字列ではない)であると想定します。

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 に答える