ورود / ثبت نام
0
0

Join کردن دو DataTable با استفاده از LINQ در ASP.Net

441 بازدید
Join کردن دو DataTable

Join کردن دو DataTable

عبارت Language Integrated Query (LINQ) برای معرفی ویژگی های ویژوال استادیو ۲۰۰۸ قرار داده شده است که قایلبت های فوق العاده query را گسترش می هد. با استفاده از LINQ اطلاعات را مانند روش SQL queries دستکاری کنید. در اینجا عملا یاد می گیریم که چگونه یک LINQ query result را با ایجاد یک اپلیکیشن نمونه به DataTable تبدیل کنیم و عملیات Join کردن دو DataTable را انجام دهیم . با من همراه باشید …

Join کردن دو DataTable

حالا طبق روش زیر پروژه را ایجاد کنید:

“Start” – “All Programs” – “Microsoft Visual Studio 2010”

“File” – “New Project” – “C#” – “Empty Project”

برای پروژه اسمی مانند JoinDataTableUsingLINQ و یا یک اسم دلخواه انتخاب کنید و مکان آن را مشخص کنید.

سپس روی Solution Explorer کلیک راست کنید و Add New Item را انتخاب کنید و سپس صفحه Default.aspx را انتخاب کنید.

۳ Grid view را برای bind کردن رکورد ها بعد از ترکیب دو data table، Drag  وdrop  کنید.

اکنون سورس کد Default.aspx به صورت زیر نشان داده خواهد شد:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title></title>  
</head>  
<body style="background-color: Blue">  
    <h4 style="color: White">  
        Article by Vithal Wadje</h4>  
    <form id="form1" runat="server">  
    <div>  
        <h4 style="color: White">  
            Product Table Records Before joining  
        </h4>  
        <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">  
            <AlternatingRowStyle BackColor="White" />  
            <EditRowStyle BackColor="#7C6F57" />  
            <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
            <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
            <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />  
            <RowStyle BackColor="#E3EAEB" />  
            <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />  
            <SortedAscendingCellStyle BackColor="#F8FAFA" />  
            <SortedAscendingHeaderStyle BackColor="#246B61" />  
            <SortedDescendingCellStyle BackColor="#D4DFE1" />  
            <SortedDescendingHeaderStyle BackColor="#15524A" />  
        </asp:GridView>  
        <br />  
        <h4 style="color: White">  
            Tax Master Table Records Before joining  
        </h4>  
        <asp:GridView ID="GridView2" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">  
            <AlternatingRowStyle BackColor="White" />  
            <EditRowStyle BackColor="#7C6F57" />  
            <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
            <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
            <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />  
            <RowStyle BackColor="#E3EAEB" />  
            <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />  
            <SortedAscendingCellStyle BackColor="#F8FAFA" />  
            <SortedAscendingHeaderStyle BackColor="#246B61" />  
            <SortedDescendingCellStyle BackColor="#D4DFE1" />  
            <SortedDescendingHeaderStyle BackColor="#15524A" />  
        </asp:GridView>  
        <br />  
    </div>  
    <h4 style="color: White">  
        Tax and Product Table Records after joining  
    </h4>  
    <asp:GridView ID="GridView3" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">  
        <AlternatingRowStyle BackColor="White" />  
        <EditRowStyle BackColor="#7C6F57" />  
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
        <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />  
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />  
        <RowStyle BackColor="#E3EAEB" />  
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />  
        <SortedAscendingCellStyle BackColor="#F8FAFA" />  
        <SortedAscendingHeaderStyle BackColor="#246B61" />  
        <SortedDescendingCellStyle BackColor="#D4DFE1" />  
        <SortedDescendingHeaderStyle BackColor="#15524A" />  
    </asp:GridView>  
    <br />  
    </form>  
</body>  
</html>

حالا از سناریوئی استفاده می کنیم که یک Product table و یک Tax Master Table داریم و می خواهیم این جدول ها را با توجه Tax Id، join کنیم. بهتر است به جای رفتن به پایگاه داده (دیتابیس) جدول ها را ایجاد کنیم.

صفحه Default.aspx.cs را باز کنید و کد زیر را برای ایجاد Product table به صورت زیر، بنویسید:

//creating Product DataTable  
           DataTable dt = new DataTable();  
           DataRow dr = null;  
           dt.TableName = "Product";  
           dt.Columns.Add("Id",typeof(int));  
           dt.Columns[0].AutoIncrementSeed=1;  
           dt.Columns[0].AutoIncrement = true;  
           dt.Columns.Add("Product Name");  
           dt.Columns.Add("Brand Name");  
           dt.Columns.Add("Tax Id",typeof(int));  
           dr = dt.NewRow();  
           dr["Product Name"] = "Laptop";  
           dr["Brand Name"] = "Samsung";  
           dr["Tax Id"] = 1;  
           dt.Rows.Add(dr);  
           DataRow dr1 = null;  
           dr1 = dt.NewRow();  
           dr1["Product Name"] = "Mouse";  
           dr1["Brand Name"] = "Dell";  
           dr1["Tax Id"] = 1;  
           dt.Rows.Add(dr1);  
      
      
           DataRow dr2 = null;  
           dr2 = dt.NewRow();  
           dr2["Product Name"] = "Mobile";  
           dr2["Brand Name"] = "Apple";  
           dr2["Tax Id"] = 1;  
           dt.Rows.Add(dr2);  
      
           DataRow dr3 = null;  
           dr3 = dt.NewRow();  
           dr3["Product Name"] = "Book";  
           dr3["Brand Name"] = "C# Corner Press";  
           dr3["Tax Id"] = 2;  
           dt.Rows.Add(dr3); 

Product table records به صورت زیر خواهد بود:

Join کردن دو DataTable

حالا Tax Master table را با استفاده از کد زیر ایجاد می کنیم:

//creating Tax DataTable  
           DataTable dtTax = new DataTable();  
             
           dtTax.TableName = "taxmaster";  
           dtTax.Columns.Add("Tax Id", typeof(int));  
           dtTax.Columns[0].AutoIncrementSeed = 1;  
           dtTax.Columns[0].AutoIncrement = true;  
           dtTax.Columns.Add("Product Category");  
           dtTax.Columns.Add("Charge", typeof(int));  
           DataRow drtax = null;  
           drtax = dtTax.NewRow();  
           drtax["Product Category"] = "Electronics";  
           drtax["Charge"] = 10;  
           dtTax.Rows.Add(drtax);  
      
           DataRow drtax1 = null;  
           drtax1 = dtTax.NewRow();  
           drtax1["Product Category"] = "Educational";  
           drtax1["Charge"] = 8;  
           dtTax.Rows.Add(drtax1); 

اکنون Tax Master table records به صورت زیر نشان داده می شود:

Join کردن دو DataTable

حالا دو جدول قبل را مشاهد کنید، یکی از آنها Product و دیگری Tax Master می باشد. با توجه به آنها قصد داریم tax charge هر product و tax charges های موجود در Tax Master table را نمایش دهیم، پس برای این کار باید با استفاده از LINQ به دو جدول قبل join شویم.

//joining Product and Tax DataTable   
  
        var JoinResult = (from p in dt.AsEnumerable()  
                          join t in dtTax.AsEnumerable()  
                          on p.Field<int>("Tax Id") equals t.Field<int>("Tax Id")  
                          select new  
                          {  
                              ProductName = p.Field<string>("Product Name"),  
                              BrandName = p.Field<string>("Brand Name"),  
                              ProductCategory = t.Field<string>("Product Category"),  
                              TaxCharge = t.Field<int>("Charge")  
  
  
                          }).ToList();  

حالا یک عملکرد برای نام گزاری LINQResultToDataTable ایجاد کنید که LINQ result را به یک table (جدول) تبدیل کند، همانند زیر:

public DataTable LINQResultToDataTable<T>(IEnumerable<T> Linqlist)    
        {    
            DataTable dt = new DataTable();    
    
               
            PropertyInfo[] columns = null;    
    
            if (Linqlist == null) return dt;    
    
            foreach (T Record in Linqlist)    
            {    
                    
                if (columns == null)    
                {    
                    columns = ((Type)Record.GetType()).GetProperties();    
                    foreach (PropertyInfo GetProperty in columns)    
                    {    
                        Type IcolType = GetProperty.PropertyType;    
    
                        if ((IcolType.IsGenericType) && (IcolType.GetGenericTypeDefinition()    
                        == typeof(Nullable<>)))    
                        {    
                            IcolType = IcolType.GetGenericArguments()[0];    
                        }    
    
                        dt.Columns.Add(new DataColumn(GetProperty.Name, IcolType));    
                    }    
                }    
    
                DataRow dr = dt.NewRow();    
    
                foreach (PropertyInfo p in columns)    
                {    
                    dr[p.Name] = p.GetValue(Record, null) == null ? DBNull.Value : p.GetValue    
                    (Record, null);    
                }    
    
                dt.Rows.Add(dr);    
            }    
            return dt;    
        }  

عملکرد قبل، LINQ query result را می گیرد و آن را به Data Table تبدیل می کند.

اکنون یک DataTable معمول داریم، حالا ۳ grid view را از ۳ Data Table، bind می کنیم تا تفاوت آنها را متوجه شویم. کل کد Defualt.aspx.cs به صورت زیر خواهد بود.

حالا اپ را اجرا کنید، سپس رکورد های GirdView قبل از join شدن به صورت زیر خواهند بود:

Join کردن دو DataTable

حالا ۳ رکورد GirdView را می بینید که بعد از join شدن به صورت زیر می باشند:

Join کردن دو DataTable

با توجه به مثال بالا، کاملا مشخص است که می توانیم با استفاده از LINQ دو DataTable را join کنیم.

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=16506
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

0 نظر در مورد Join کردن دو DataTable با استفاده از LINQ در ASP.Net

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هیچ دیدگاهی نوشته نشده است.