2009-11-23 3 views
16

のすべての値の合計を取得、のは、私は以下の構造があると仮定してみましょう:VB.NET LINQクエリ:VB.NETでは具体的構成メンバー

Public Structure Product 
    Public ItemNo As Int32 
    Public Description As String 
    Public Cost As Decimal 
End Structure 

を...と製品のジェネリック一覧:

Dim ProductsList As New List(Of Product) 

Dim product1 As New Product 

With product1 
    .ItemNo = 100 
    .Description = "Standard Widget" 
    .Cost = 10D 
End With 

ProductsList.Add(product1) 

Dim product2 As New Product 

With product2 
    .ItemNo = 101 
    .Description = "Standard Cog" 
    .Cost = 10.95D 
End With 

ProductsList.Add(product2) 

Dim product3 As New Product 

With product3 
    .ItemNo = 101 
    .Description = "Industrial Strenght Sprocket" 
    .Cost = 99.95D 
End With 

ProductsList.Add(product3) 

ListのProduct.Cost値をすべて合計するLINQクエリを定義するにはどうすればよいですか?言い換えれば、LINQ VB.NETのクエリは、単一のLINQクエリ内の3つの製品コスト値の合計を反映する120.90の値を返します。

答えて

33

組み込みのSumメソッドはこれを既に行います。 VBで

が、それは次のようになります。

ProductsList.Sum((item) => item.Cost); 
+6

VBのアプローチ:ProductList.Sum(

ProductList.Sum(Function(item) item.Cost) 

は、C#では、それはこのようになります機能(x)x.Cost) – Nathan

+0

あなたの時間と助けのために、マッケイ、ネイサン、そしてエイディロンの両方に感謝します。すべての回答が私のために働いていました。あなたの答えは、もともとC#で評価された逆アセンブルされたコードを使用しようとするよりもはるかに読みやすく、理解し、実装しました。 {:-P .NET Reflectorから逆アセンブリを送信できます。どちらのアプローチも論理的にも意味的にも同じですが、両者によって生成されるコードの構文はわずかに異なり、興味深い読みになります。 また、多くのありがとう... – ClockEndGooner

+0

ありがとう!私は=>はC#で何かを理解することができませんでした.... vbの構文はより意味を作っています。 –

3

一つの方法は、次のようになります:

Dim s = (From p As Product In products Select p.Cost).Sum()