عملگرهای مرتب سازی در Linq بخش چهارم


در مقاله قبل ، ۵ مثال را در مورد sorting در زبان linq با هم بررسی نمودیم . در این مقاله میخواهیم مثالهای دیگری در این زمینه مشاهده کنیم .

مثال ششم :

در این مثال می خواهیم مرتب سازی نزولی را روی لیست محصولات موجود در انبار و بر اساس تعداد محصول موجود در انبار انجام دهیم .

                              
public static void OrderByDescendingSimple2()
{
    var products = new ProductRepository().GetAll();
    var sortedProducts =
                        from product in products
                        orderby product.UnitsInStock descending
                        select product;
    foreach (var product in sortedProducts)
    {
        Console.WriteLine("ID: {0}\tName: {1}\tUnists In Stock: {2}", product.ProductID, product.ProductName, product.UnitsInStock);
    }
}

بنابراین عملیات مرتب سازی را علاوه بر اینکه می توان روی primitive type ها انجام دهیم ، میتوان روی انواع تعریف شده توسط کاربر نیز اعمال کنیم .

مرتب سازی بر اساس دو یا چند مقیاس :

می توان بیشتر از یک معیار برای مقایسه و مرتب سازی در نظر بگیریم . باید آنها را توسط کاما (,) از هم جدا کنیم . به مثال هفتم توجه کنید :

مثال هفتم :

در این مثال ، ما آرایه ای از کلمات را داریم که می خواهیم آنها را ابتدا بر اساس طول کلمه و سپس بر اساس حروف الفبای کلمه (بصورت صعودی) مرتب کنیم :

                              
public static void ThenBySimple()
{
    string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    var sortedDigits =
                        from digit in digits
                        orderby digit.Length, digit
                        select digit;
    Console.WriteLine("Sorted digits:\n——————-");
    foreach (var digit in sortedDigits)
    {
        Console.WriteLine(digit);
    }
}

مثال هشتم :

برای مرتب سازی تو در تو بصورت ExtensionMethod ، باید دستور دوم به بعد را بصورت thenby بنویسیم :

                              
public static void ThenByComparer()
{
    string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };
    var sortedWords = words.OrderBy(a => a.Length)
                            .ThenBy(a => a, new CaseInsensitiveComparer());
    foreach (var word in sortedWords)
    {
        Console.WriteLine(word);
    }
}

توضیح : آرایه ای از رشته ها را داریم که می خواهیم ابتدا بر اساس طول رشته و سپس بر اساس مدل مقایسه ای دلخواه ما (که در اینجا غیرحساس بودن به حروف بزرگ و کوچک است) مرتب سازی انجام شود .

تمرین : برای مشاهده مثالی دیگر در این زمینه به وب سایت معتبر CodeProject مراجعه کنید .

نکته : می توان جهت مرتب سازی (sorting direction) را برای هرکدام از thenby ها بصورت جداگانه معرفی کنیم که در مقاله آینده بحث خواهیم کرد .

آخرین بخش از مبحث مرتب سازی در LINQ را در مقاله بعد خواهید دید …



دیدگاه ها :