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

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

در مقاله قبل ، کلاس های Product و ProductRepository را تعریف کردیم . اکنون در این مقاله می خواهیم مثال سوم را بیان کنیم .

مثال سوم :

میخواهیم تمام محصولات را از انبار گرفته و آنها را بر اساس نامشان مرتب کنیم :

public static void OrderBy_Sample3()

        {

            var products = new ProductRepository().GetAll();

            var sortedProducts =

                                from product in products

                                orderby product.ProductName

                                select product;

            foreach (var product in sortedProducts)

            {

                Console.WriteLine("ID: {0}\tName: {1}", product.ProductID, product.ProductName);

            }

}

توضیح : ابتدا با فراخوانی متد GetAll ، تمام محصولات موجود در انبار محصولات را بیرون کشیدیم و سپس توسط دستور orderby ، آنها را براساس نامشان مرتب کرده و در متغیر sortedProducts ریخته و در نهایت در یک حلقه foreach ، تک تک آنها را به خروجی می دهیم .

مدل مقایسه ای دلخواه در دستور OrderBy :

برای اینکه روش دلخواه خود را برای مقایسه و sorting به دستور orderby اعمال کنیم ، باید اولا از دستور orderby بصورت Extension Method استفاده کنیم ، دوما مدل مقایسه ای دلخواه خود را تعریف کنیم .

مثال چهارم :

در این مثال ما میخواهیم کلمات واقع در یک آرایه بصورت CaseInsensitive (یعنی غیر حساس به حروف بزرگ و کوچک انگلیسی) با هم مقایسه و سورت شوند .

نکته : پیش فرض مقایسه کلمات در زبانهای برنامه نویسی ، CaseSensitive می باشد .

آرایه ای از رشته ها بصورت زیر داریم :

string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };

نحوه استفاده از دستور orderby بصورت extensionMethod برای مقایسه دلخواه بصورت زیر است :

var sortedWords = words.OrderBy(word => word, new CaseInsensitiveComparer());

حال باید کلاس CaseInsensitiveComparer را پیاده سازی کنیم :

بدین منظور کلاسی به همین نام در پروژه خود ایجاد کنید و کدهای زیر را در آن تعریف کنید :

public class CaseInsensitiveComparer : IComparer<string>

    {

        public int Compare(string x, string y)

        {

            return string.Compare(x, y, StringComparison.OrdinalIgnoreCase);

        }

    }

متد Compare یکی از سه خروجی -۱ , ۰ , ۱ را برمیگرداند :

  • اگر اولی از دومی بزرگتر باشد ۱ برمیگرداند .
  • اگر اولی با دومی برابر باشد ۰ برمیگرداند .
  • و اگر دومی از اولی بزرگتر باشد ۱- برمیگرداند .

بنابراین کد مثال ۴ بطور کلی بصورت زیر شده است :

public static void OrderByComparer()

        {

            string[] words = { "aPPLE", "AbAcUs", "bRaNcH", "BlUeBeRrY", "ClOvEr", "cHeRry" };

            var sortedWords = words.OrderBy(word => word, new CaseInsensitiveComparer());

            foreach (var word in sortedWords)

            {

                Console.WriteLine(word);

            }

        }

مثال پنجم :

برای سورت بصورت نزولی مثال زیر را داریم :

public static void OrderByDescendingSimple1()

        {

            double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };

            var sortedDoubles =

                                from number in doubles

                                orderby number descending

                                select number;

            Console.WriteLine("The doubles from highest to lowest:\n————————-");

            foreach (var number in sortedDoubles)

            {

                Console.WriteLine(number);

            }

        }

همانطور که مشاهده می کنید ، تنها تفاوت سورت نزولی با صعودی (پیش فرض) استفاده از عبارت descending می باشد .

مقاله سوم از مبحث مرتب سازی در Linq به پایان رسید . در مقاله بعد سراغ مثال های دیگری از این مبحث مهم خواهیم رفت . پس با ما باشید .


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



دیدگاه ها :