مشخصات مقاله
-
1263
-
0.0
-
5340
-
0
-
0
آموزش متدهای الحاقی Any، All و Contains
کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.
متدهای الحاقی Any، All و Contains (عملیات کمیت سنجی/Quantifier)
عملیات Quantifier یک مقدار بولی را برمی گردانند که بیانگر تطبیق یا عدم تطبیق برخی یا تمام المان های مجموعه مورد پرس و جو با شرط می باشد.
تصویر زیر دو عملیات کاملا متفاوت را بر روی دو منبع داده مختلف نشان می دهد. اولین عملیات تنها کاراکترهای A را از منبع داده استخراج می کند (در واقع بررسی می کند آیا یک یا چند المان دنباله ی ورودی (منبع) با حرف A منطبق هستند یا خیر و همان طور که مشاهده می کنید نتیجه ی آن true می باشد). عملیات دوم بررسی می کند آیا تمامی المان های موجود در منبع داده با شرط مشخص شده منطبق هستند یا خیر (از منبع داده می پرسد آیا کلیه ی المان های آن برابر با A هستند یا خیر). نتیجه ی این عملیات نیز مقدار بولی true می باشد.
عملگرهایی که به صورت متد الحاقی (extension method) برای اجرای این دست عملیات فراخوانده می شوند، در جدول زیر فهرست شده اند.
|
اسم متد |
شرح |
سینتکس/ دستور نگارشی عبارت کوئری در زبان C# |
نحوه ی نوشتن/سینتکس عبارت کوئری در VB |
اطلاعات بیشتر |
|
All |
مشخص می کند آیا تمامی المان های موجود در یک مجموعه، شرط مشخص شده در عبارت کوئری را برآورده می کنند یا خیر. |
پشتیبانی نمی شود. |
Aggregate …In …Into All(…) |
Enumerable.All Queryable.All |
|
Any |
بررسی می کند آیا هر یک از المان های موجود در مجموعه، شرط مشخص شده در عبارت کوئری را برآورده می کند یا خیر. |
پشتیبانی نمی شود. |
Aggregate …In …Into Any() |
Enumerable.Any Queryable.Any |
|
Contains |
بررسی می کند آیا یک مجموعه دربردارنده ی المان مشخص شده هست یا خیر. |
پشتیبانی نمی شود. |
پشتیبانی نمی شود. |
Enumerable.Contains Queryable.Contains |
مثال
نمونه ی زیر دستور Aggregate را به عنوان بخشی از یک شرط (عبارت فیلتر و محدود کننده ی نتیجه) در کوئری LINQ (در زبان VB) بکار می برد.
مثال زیر با استفاده از عبارت Aggregate و متد الحاقی (extension method) All<TSource> تنها آن افرادی را از مجموعه واکشی می کند که سن حیوان خانگی آن ها از مقدار مشخص شده در شرط کم تر باشد.
Class Person
Public Property Name As String
Public Property Pets As Pet()
End Class
Class Pet
Public Property Name As String
Public Property Age As Integer
End Class
Sub All()
Dim barley As New Pet With {.Name = "Barley", .Age = 4}
Dim boots As New Pet With {.Name = "Boots", .Age = 1}
Dim whiskers As New Pet With {.Name = "Whiskers", .Age = 6}
Dim bluemoon As New Pet With {.Name = "Blue Moon", .Age = 9}
Dim daisy As New Pet With {.Name = "Daisy", .Age = 3}
Dim charlotte As New Person With {.Name = "Charlotte", .Pets = New Pet() {barley, boots}}
Dim arlene As New Person With {.Name = "Arlene", .Pets = New Pet() {whiskers}}
Dim rui As New Person With {.Name = "Rui", .Pets = New Pet() {bluemoon, daisy}}
' Create the list of Person objects that will be queried.
Dim people As New System.Collections.Generic.List(Of Person)(New Person() {charlotte, arlene, rui})
Dim query = From pers In people
Where (Aggregate pt In pers.Pets Into All(pt.Age >2))
Select pers.Name
Dim sb As New System.Text.StringBuilder()
For Each name As String In query
sb.AppendLine(name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Arlene
' Rui
End Sub
مثال بعدی با بهره گیری از Aggregate و متد الحاقی Any<TSource> تنها آن افرادی را از مجموعه واکشی می کند که دارای حداقل یک حیوان خانگی بوده و همچنین سن آن بیشتر از مقدار مشخص شده در عبارت شرطی باشد.
Class Person
Public Property Name As String
Public Property Pets As Pet()
End Class
Class Pet
Public Property Name As String
Public Property Age As Integer
End Class
Sub Any()
Dim barley As New Pet With {.Name = "Barley", .Age = 4}
Dim boots As New Pet With {.Name = "Boots", .Age = 1}
Dim whiskers As New Pet With {.Name = "Whiskers", .Age = 6}
Dim bluemoon As New Pet With {.Name = "Blue Moon", .Age = 9}
Dim daisy As New Pet With {.Name = "Daisy", .Age = 3}
Dim charlotte As New Person With {.Name = "Charlotte", .Pets = New Pet() {barley, boots}}
Dim arlene As New Person With {.Name = "Arlene", .Pets = New Pet() {whiskers}}
Dim rui As New Person With {.Name = "Rui", .Pets = New Pet() {bluemoon, daisy}}
' Create the list of Person objects that will be queried.
Dim people As New System.Collections.Generic.List(Of Person)(New Person() {charlotte, arlene, rui})
Dim query = From pers In people
Where (Aggregate pt In pers.Pets Into Any(pt.Age >7))
Select pers.Name
Dim sb As New System.Text.StringBuilder()
For Each name As String In query
sb.AppendLine(name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Rui
End Sub