با سلام
در پست دوم این تاپیک یک کئوری پیشرفته تر رو با Linq براتون توضیح میدم امیدوارم که به دردتون بخوره . البته ظاهراً کسی این تاپیک رو دنبال نمیکنه به هر حال یه نفر هم به دردش بخوره واسه من کافیه .
در ابتدا مثل پست قبلی یک کلاس جهت استفاده برنامه مینویسیم . ( کلاس Order )
Partial Friend Class Order
Public ID As Integer
Public OrderDate As Date
Public Price As Integer
End Class
در ادامه مقادیری به این کلاس اختصاص میدیم ( از این منابع در ادامه بحث استفاده میشه )
Private Orders As Order() = New Order() { _
New Order() With {.ID = 1, .OrderDate = CDate("01/15/2012"), .Price = 5000}, _
New Order() With {.ID = 2, .OrderDate = CDate("02/14/2011"), .Price = 34000}, _
New Order() With {.ID = 4, .OrderDate = CDate("01/12/2010"), .Price = 3500}, _
New Order() With {.ID = 8, .OrderDate = CDate("03/08/2012"), .Price = 45300}, _
New Order() With {.ID = 1, .OrderDate = CDate("12/30/2009"), .Price = 20000}, _
New Order() With {.ID = 7, .OrderDate = CDate("12/25/2012"), .Price = 15000}, _
New Order() With {.ID = 2, .OrderDate = CDate("09/19/2011"), .Price = 12500}, _
New Order() With {.ID = 1, .OrderDate = CDate("08/15/2012"), .Price = 6000}, _
New Order() With {.ID = 4, .OrderDate = CDate("06/24/2010"), .Price = 6000}, _
New Order() With {.ID = 1, .OrderDate = CDate("05/24/2010"), .Price = 6000}, _
New Order() With {.ID = 5, .OrderDate = CDate("04/10/2010"), .Price = 6000}, _
New Order() With {.ID = 7, .OrderDate = CDate("04/20/2011"), .Price = 6000}}
با نگاهی به اطلاعات بالا مشخص میشه که مشخصات و ویژگیهای کلاس Order چی هست .
خوب به قسمت جالب مسئله میرسیم .
کئوری که در ادامه استفاده میشه به این صورت هست که ما میایم با توجه به ID هر خرید ( هر رکورد کلاس Order یه ID داره که این ID متعلق به یک مشتری هستش به نوعی تاریخچه خرید مشتری های یک فروشگاه میتونه باشه ) مجموع مبلغ خریدهای هر آی دی رو استخراج میکنیم . به اصطلاح با استفاده از عملگر Gorup این کار صورت میگیره .
Dim totalPrices = From order In Orders _
Group order By order.ID _
Into TotalPrice = Sum(order.Price) Order By ID
همانطور که مشاهده میشه عملگرد Group با توجه به فیلدی که براش تعیین کردیم ( در اینجا فیلد ID کلاس Order ) خرید های هر مشتری رو دسته بندی میکنه و در ادامه با استفاده از عملگر Sum مجموع این دسته ها رو به دست میاره . در انتها بر اساس ID اطلاعات استخراج شده رو با استفاده از عملگر Order By اونها رو Sort ( از کوچک به بزرگ دسته بندی میکنه )
برای نمایش اطلاعات دسته بندی شده ( مجموع خریدهای هر مشتری ) از کدهای زیر استفاده میکنم :
For Each item In totalPrices
TextBox1.Text &= ("ID : " & item.ID & " ---> " & item.TotalPrice) & vbCrLf
Next
بعد از اعمال کئوری نتایج زیر به دست میاد :
ID : 1 ---> 37000
ID : 2 ---> 46500
ID : 4 ---> 9500
ID : 5 ---> 6000
ID : 7 ---> 21000
ID : 8 ---> 45300
کدهای استفاده شده :
Imports System.Linq
Public Class Form1
Partial Friend Class Order
Public ID As Integer
Public OrderDate As Date
Public Price As Integer
End Class
Private Orders As Order() = New Order() { _
New Order() With {.ID = 1, .OrderDate = CDate("01/15/2012"), .Price = 5000}, _
New Order() With {.ID = 2, .OrderDate = CDate("02/14/2011"), .Price = 34000}, _
New Order() With {.ID = 4, .OrderDate = CDate("01/12/2010"), .Price = 3500}, _
New Order() With {.ID = 8, .OrderDate = CDate("03/08/2012"), .Price = 45300}, _
New Order() With {.ID = 1, .OrderDate = CDate("12/30/2009"), .Price = 20000}, _
New Order() With {.ID = 7, .OrderDate = CDate("12/25/2012"), .Price = 15000}, _
New Order() With {.ID = 2, .OrderDate = CDate("09/19/2011"), .Price = 12500}, _
New Order() With {.ID = 1, .OrderDate = CDate("08/15/2012"), .Price = 6000}, _
New Order() With {.ID = 4, .OrderDate = CDate("06/24/2010"), .Price = 6000}, _
New Order() With {.ID = 1, .OrderDate = CDate("05/24/2010"), .Price = 6000}, _
New Order() With {.ID = 5, .OrderDate = CDate("04/10/2010"), .Price = 6000}, _
New Order() With {.ID = 7, .OrderDate = CDate("04/20/2011"), .Price = 6000}}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim totalPrices = From order In Orders _
Group order By order.ID _
Into TotalPrice = Sum(order.Price) Order By ID
For Each item In totalPrices
txtResulte.Text &= ("ID : " & item.ID & " ---> " & item.TotalPrice) & vbCrLf
Next
End Sub
End Class
موفق باشید./