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

عملگرهای مرتب سازی در 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 را در مقاله بعد خواهید دید …


تاریخ انتشار : ۲۷ اسفند ۱۳۹۴



دیدگاه ها :