در مثال قبلی فیلترینگ ساده اطلاعات را نشان دادیم و در این مثال با پرس و جوی پیچیده تر که شامل داده های گروه بندی شده و یا مرتب شده است را نشان خواهیم داد.
مثال 4 : گروه بندی و مرتب سازی فهرست فیلم ها
کد های VB.NET
Public Class Grouping
Private _genre As Integer
Private _movieCount As Integer
Public Property Genre() As Integer
Get
Return _genre
End Get
Set(ByVal value As Integer)
_genre = value
End Set
End Property
Public Property MovieCount() As Integer
Get
Return _movieCount
End Get
Set(ByVal value As Integer)
_movieCount = value
End Set
End Property
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim groups As New Dictionary(Of String, Grouping)
For Each m In movies
If (Not groups.ContainsKey(m.Genre)) Then
groups(m.Genre) = _
New Grouping With {.Genre = m.Genre, .MovieCount = 0}
End If
groups(m.Genre).MovieCount = groups(m.Genre).MovieCount + 1
Next
Dim results As New List(Of Grouping)(groups.Values)
results.Sort(AddressOf MovieSort)
Me.GridView1.DataSource = results
Me.GridView1.DataBind()
End Sub
Private Function MovieSort(ByVal x As Grouping, ByVal y As Grouping) As Integer
Return IIf(x.MovieCount > y.MovieCount, -1, IIf(x.MovieCount
< y.MovieCount, 1, 0))
End Function
کد های C-Sharp
public class Grouping
{
public int Genre { get; set; }
public int MovieCount { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
Dictionary<int, Grouping> groups = new Dictionary<int, Grouping>();
foreach (Movie m in movies)
{
if (!groups.ContainsKey(m.Genre))
{
groups[m.Genre] = new Grouping { Genre = m.Genre, MovieCount = 0 };
}
groups[m.Genre].MovieCount++;
}
List<Grouping> results = new List<Grouping>(groups.Values);
results.Sort(delegate(Grouping x, Grouping y)
{
return
x.MovieCount > y.MovieCount ? -1 :
x.MovieCount < y.MovieCount ? 1 :
0;
});
this.GridView1.DataSource = results;
this.GridView1.DataBind();
}
برای گروه بندی فیلم ها در هر ژانر و شمارش تعداد فیلم در هر ژانر ، نیازمند ایجاد یک کلاس جدید ، ایجاد یک فرهنگ لغت(Dictionary) و اجرای آن در یک نمونه هستیم . میبینیم که برای انجام چنین کار ساده ای کد ها پیچیده شدند علاوه بر آن منابع بسیاری را درگیر کاری که می خواهید انجام دهید می کنید.
نحوه یک پرس و جوی کمی پیچیده اینگونه بود حالا شما فکر میکنید از همین روش ها استفاده میکنید و یا به دنبال راه کار های دیگری هستید که از کد ها و منابع کمتری استفاده کند.
این را در نظر بگیرید : اگر شما مجبور باشید برنامه ای را توسعه دهید که با کدهای آن آشنا نیستید ، چه مدت طول می کشد که با کد ها آشنا شوید تا برنامه را به شکلی که میخواهید تغییر دهید؟
در پست بعدی روش های سنتی را با استفاده از LINQ خواهیم نوشت.