آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تبدیل داده با LINQ

دوره های مرتبط با این مقاله

تبدیل داده با LINQ:

Language-Integrated Query (LINQ) تنها در مورد بازیابی داده نیست. بلکه یک ابزار قدرتمند نیز برای تبدیل داده می باشد. می باشد. با استفاده از LINQ queryمی توانید از ترتیب منبع به عنوان ورودی استفاده کنید و آن را به روش های زیادی برای ایجاد ترتیب خروجی جدید، اصلاح کنید. شما می توانید خود ترتیب را بدون بدون تغییر عناصر با مرتب کردن و گروه بندی کردن اصلاح کنید. اما شاید قویترین ویژگی query های LINQ توانایی در ایجاد انواع جدید می باشد. این امر در عبارت select تکمیل می شود. برای مثال می توانید عملکردهای زیر را اجرا کنید:

  • ترکیب چند ترتیب ورودی به یک خروجی مجزا که دارای یک نوع جدید می باشد.
  • ایجاد توالی های خروجی که عناصر آنها حاوی تنها یک یا چندین پراپرتی از هر عنصر در ترتیب منبع می باشد.
  • ایجاد توالی های خروجی که عناصر آنها حاوی نتایجی از عملکردهای اجرا شده روی یک منبع داده می باشد.
  • ایجاد توالی های خروجی به شکل مختلف. به عنوان مثال شما می توانید داده را از ردیف های SQL یا فایل های متن به XML تبدیل کنید.

این موارد تنها چند مثال هستند. البته تبدیل ها می توانند به روش های مختلف در یک query ترکیب شوند. به علاوه توالی خروجی یک query می تواند به عنوان توالی ورودی برای یک query جدید استفاده شود.

اتصال چند ورودی به توالی خروجی:

می توانید از LINQ queryبرای ایجاد یک توالی خروجی که حاوی عناصری از بیشتر از یک توالی ورودی می باشد، استفاده کنید. مثال زیر چگونگی ترکیب دو ساختار داده در حافظه را نشان می دهد، اما همان اصول می توانند برای ترکیب داده از منابع XML یا SQL یا DataSet استفاده شوند. دو نوع زیر را در نظر بگیرید:

class Student
‎{‎
‎    public string First { get; set; }‎
‎    public string Last {get; set;}‎
‎    public int ID { get; set; }‎
‎    public string Street { get; set; }‎
‎    public string City { get; set; }‎
‎    public List< int > Scores;‎
‎}‎
 
class Teacher
‎{‎
‎    public string First { get; set; }‎
‎    public string Last { get; set; }‎
‎    public int ID { get; set; } ‎
‎    public string City { get; set; }‎
‎}‎
                        

مثال زیر query را نشان می دهد:

class DataTransformations
‎{‎
‎    static void Main()‎
‎    {‎
‎        // Create the first data source.‎
‎        List< Student > students = new List< Student >()‎
‎        {‎
‎            new Student {First=”Svetlana”,‎
‎                Last=”Omelchenko”, ‎
‎                ID=111, ‎
‎                Street=”123 Main Street”,‎
‎                City=”Seattle”,‎
‎                Scores= new List< int > {97, 92, 81, 60}},‎
‎            new Student {First=”Claire”,‎
‎                Last=”O’Donnell”, ‎
‎                ID=112,‎
‎                Street=”124 Main Street”,‎
‎                City=”Redmond”,‎
‎                Scores= new List< int > {75, 84, 91, 39}},‎
‎            new Student {First=”Sven”,‎
‎                Last=”Mortensen”,‎
‎                ID=113,‎
‎                Street=”125 Main Street”,‎
‎                City=”Lake City”,‎
‎                Scores= new List< int > {88, 94, 65, 91}},‎
‎        };‎
 
‎        // Create the second data source.‎
‎        List< Teacher > teachers = new List< Teacher >()‎
‎        {                ‎
‎            new Teacher {First=”Ann”, Last=”Beebe”, ID=945, City = “Seattle”},‎
‎            new Teacher {First=”Alex”, Last=”Robinson”, ID=956, City = ‎‎“Redmond”},‎
‎            new Teacher {First=”Michiyo”, Last=”Sato”, ID=972, City = ‎‎“Tacoma”}‎
‎        };‎
 
‎        // Create the query. ‎
‎        Var peopleInSeattle = (from student in students
‎                    where student.City == “Seattle” ‎
‎                    select student.Last)‎
‎                    .Concat(from teacher in teachers
‎                            where teacher.City == “Seattle” ‎
‎                            select teacher.Last);‎
 
‎        Console.WriteLine(“The following students and teachers live in ‎Seattle:”);‎
‎        // Execute the query. ‎
‎        Foreach (var person in peopleInSeattle)‎
‎        {‎
‎            Console.WriteLine(person);‎
‎        }‎
 
‎        Console.WriteLine(“Press any key to exit.”);‎
‎        Console.ReadKey();‎
‎    }‎
‎}‎
‎/* Output:‎
‎    The following students and teachers live in Seattle:‎
‎    Omelchenko
‎    Beebe
‎ */‎
                        

برای اطلاعات بیشتر join clause (C# Reference) و select clause (C# Reference) را بررسی کنید.

انتخاب زیرمجموعه ی مربوط به هر عنصر منبع (Source Element)

دو روش اولیه برای انتخاب یک زیرمجموعه مربوط به هر عنصر در توالی منبع (source sequence) وجود دارد:

  1. برای انتخاب فقط یک عضو از عنصر منبع از عملکرد نقطه (dot operation) استفاده کنید. در مثال فرض بر این است که یک آبجکت Customer (مشتری) حاوی چندین پراپرتی عمومی شامل یک رشته به نام City (شهر) می باشد. در هنگام اجرا این query یک توالی خروجی از رشته ها را تولید خواهد کرد.
    var query = from cust in Customers
    select cust.City;
    
  2. برای ایجاد عناصری که حاوی بیشتر از یک پراپرتی از عنصر منبع هستند، می توانید از یک آبجکت اولیه یا با یک آبجکت نامگذاری شده یا یک نوع ناآشنا، استفاده کنید. مثال زیر استفاده از یک نوع ناآشنا را نشان می دهد، برای فشرده کردن دو پراپرتی از هر عنصر مشتری (Customer)
    var query = from cust in Customer
                select new {Name = cust.Name, City = cust.City};
    

    برای اطلاعات بیشتر Object and Collection Initializers (C# Programming Guide) و Anonymous Types (C# Programming Guide) را بررسی کنید.

تبدیل آبجکت های in-Memory به XML

Query های LINQ تبدیل داده بین ساختارهای داده ی in-memory، دیتابیس های SQL، دیتاست های ADO.NET و جریان ها یا داکیومنت های XML، را آسان می سازد. مثال زیر آبجکت ها را در یک ساختار داده ی in-memory به عناصر XML تبدیل می کند.

class XMLTransform
‎{‎
‎    static void Main()‎
‎    {            ‎
‎        // Create the data source by using a collection initializer. ‎
‎        // The Student class was defined previously in this topic.‎
‎        List< Student > students = new List< Student >()‎
‎        {‎
‎            new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores = ‎new List< int >{97, 92, 81, 60}},‎
‎            new Student {First="Claire", Last="O’Donnell", ID=112, Scores = ‎new List< int >{75, 84, 91, 39}},‎
‎            new Student {First="Sven", Last="Mortensen", ID=113, Scores = new ‎List< int >{88, 94, 65, 91}},‎
‎        };‎
 
‎        // Create the query. ‎
‎        var studentsToXML = new XElement("Root",‎
‎            from student in students
‎            let x = String.Format("{0},{1},{2},{3}", student.Scores[0],‎
‎                    student.Scores[1], student.Scores[2], student.Scores[3])‎
‎            select new XElement("student",‎
‎                       new XElement("First", student.First),‎
‎                       new XElement("Last", student.Last),‎
‎                       new XElement("Scores", x)‎
‎                    ) // end "student"‎
‎                ); // end "Root" ‎
 
‎        // Execute the query.‎
‎        Console.WriteLine(studentsToXML);‎
 
‎        // Keep the console open in debug mode.‎
‎        Console.WriteLine("Press any key to exit.");‎
‎        Console.ReadKey();‎
‎    }‎
‎}‎
                        

این کد خروجی XML زیر را تولید می کند:

‎< div class="table-responsive" >
    ‎    < table class="table table-bordered" >
        ‎
        < thead >
            < tr >
                < th >Row< /th >‎
                < th >First Name< /th >‎
                < th >Last Name< /th >‎
                < th >Email< /th >‎
                < th >Biography< /th >‎
            < /tr >‎
        < /thead >‎
        ‎
        < tbody >
            ‎
            < tr >
                < td >1< /td >‎
                < td >John< /td >‎
                < td >Carter< /td >‎
                < td >johncarter@mail.com< /td >‎
                < td >Lorem ipsum dolor sit amet…< /td >‎
            < /tr >‎
            < tr >
                < td >2< /td >‎
                < td >Peter< /td >‎
                < td >Parker< /td >‎
                < td >peterparker@mail.com< /td >‎
                < td >Vestibulum consectetur scelerisque…< /td >‎
            < /tr >‎
            < tr >
                < td >3< /td >‎
                < td >John< /td >‎
                < td >Rambo< /td >‎
                < td >johnrambo@mail.com< /td >‎
                < td >Integer pulvinar leo id risus…< /td >‎
            < /tr >‎
        < /tbody >‎
    < /table >‎
< /div >‎
‎<  Root >‎
‎  < student >
    ‎
    ‎    < first >Svetlana< /first >‎
    ‎    < last >Omelchenko< /last >‎
    ‎    < scores >97,92,81,60< /scores >‎
    ‎
< /student >‎
‎  < student >
    ‎
    ‎    < first >Claire< /first >‎
    ‎    < last >O'Donnell< /last >‎
    ‎    < scores >75,84,91,39< /scores >‎
    ‎
< /student >‎
‎  < student >
    ‎
    ‎    < first >Sven< /first >‎
    ‎    < last >Mortensen< /last >‎
    ‎    < scores >88,94,65,91< /scores >‎
    ‎
< /student >‎
‎< /Root >‎
                        

برای اطلاعات بیشتر Creating XML Trees in C# (LINQ to XML) را بررسی کنید.

اجرای عملکردها روی عناصر منبع:

یک توالی خروجی امکان ندارد دارای عناصر یا پراپرتی های عنصری از توالی منبع (source sequence) باشد. در عوض خروجی ممکن است ترتیبی از مقادیری باشد که با استفاده از عناصر منبع به عنوان استدلال های ورودی محاسبه شود. هنگامی که query ساده ی زیر اجرا می شود، یک توالی از رشته ها را خروجی می دهد که مقادیر آنها یک محاسبه براساس توالی منبع از عناصر نوع doubleرا نمایش می دهد.

نکته:

اگر query به دامنه های دیگری ترجمه شود، فراخوانی روش ها در عبارات query پشتیبانی نمی شود. برای مثال شما نمی توانید یک روش ساده ی C# را در LINQ به SQL فرا بخوانید، زیرا SQL Server هیچ کانتکستی برای آن ندارد. به هرحال می توانید برنامه های ذخیره شده را به روش ها طراحی کنید و آنها را فرا بخوانید. برای اطلاعات بیشتر Stored Procedures [LINQ to SQL] را بررسی کنید.

class FormatQuery
‎{‎
‎    static void Main()‎
‎    {            ‎
‎        // Data source. ‎
‎        double[] radii = { 1, 2, 3 };‎
 
‎        // Query.‎
‎        IEnumerable< string > query =‎
‎            from rad in radii
‎            select String.Format("Area = {0}", (rad * rad) * 3.14);‎
 
‎        // Query execution.  ‎
‎        foreach (string s in query)‎
‎            Console.WriteLine(s);‎
 
‎        // Keep the console open in debug mode.‎
‎        Console.WriteLine("Press any key to exit.");‎
‎        Console.ReadKey();‎
‎    }‎
‎}‎
‎/* Output:‎
‎    Area = 3.14‎
‎    Area = 12.56‎
‎    Area = 28.26‎
‎*/‎
‎
                        

  • 2409
  •    0
  • تاریخ ارسال :   1394/07/27

دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .