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

تبدیل نتایج LINQ Query به DataTable در ASP.NET

354 بازدید
LINQ Query

LINQ Query

کلمه LINQ مخفف عبارت Language-Integrated Query و مجموعه ای از ویژگی های معرفی شده در ویژوال استادیو ۲۰۰۸ می باشد که قابلیت های فوق العاده LINQ Query را در زبان های C# و Visual Basic گسترش می دهد، با استفاده از LINQ می توانید اطلاعات را مانند SQL queries ها معمولی دستکاری کنید.

LINQ Query

پروژه را به صورت زیر ایجاد کنید :

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

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

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

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

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

حالا سورس کد ر به صورت زیر خواهد بود:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ConvertLinqResultToDataTable.Default" %>

<!DOCTYPE html>

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title></title>
</head>
<bodystyle="background-color: Blue">
<h4style="color: White">Article by VithalWadje</h4>
<formid="form1"runat="server">
<tablestyle="margin-top: 60px; color: White">

<tr>
<td></td>
<td>
<asp:ButtonID="btngetresult"runat="server"Text="Get Result"
/>
</td>
</tr>

<tr>
<td>
<asp:GridViewID="GridView1"runat="server"></asp:GridView>
</td>
</tr>
</table>

</form>
</body>
</html>

حالا کلاس فایل Default.aspx.cs را باز کنید و یک کلاس با نام Customerو با ویژگی asایجاد کنید.

publicclassCustomer
    {  
privatestring _Name, _City, _Address;  

publicstring Name  
        {  
get { return _Name; }  
set { _Name = value; }  
        }  

publicstring City  
        {  
get { return _City; }  
set { _City = value; }  
        }  

publicstring Address  
        {  
get { return _Address; }  
set { _Address = value; }  
        }  

    }  

اکنون یک صف از type customer ایجاد کنید و مقادیر را به هر ویژگی as اختصاص دهید.

Customer[] cust = new Customer[]  
        {  

new Customer{Name="VithalWadje",City="Mumbai",Address="Boriwali"},  
new Customer{Name="SudhirWadje",City="Latur",Address="Kabansangvi"},  


        }; 

حالا رکورد های بیرون کردن (fire)LINQ query را داریم، می توانید رکورد ها را از پایگاه داده ها (دیتابیس) بگیرید اما برای درک بهتر از آنها استفاده نکرده ایم.

اکنون یک عملکرد برای نام گزاری LINQResultToDataTable ایجاد کنید که LINQ Result را به DataTable as تبدیل کند.

public DataTable LINQResultToDataTable<T>(IEnumerable<T>Linqlist)  
       {  
           DataTable dt = newDataTable();  


PropertyInfo[] columns = null;  

if (Linqlist == null) returndt;  

foreach (T Record inLinqlist)  
           {  

if (columns == null)  
               {  
columns = ((Type)Record.GetType()).GetProperties();  
foreach (PropertyInfoGetPropertyin columns)  
                   {  
                       Type colType = GetProperty.PropertyType;  

if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()  
                       == typeof(Nullable<>)))  
                       {  
colType = colType.GetGenericArguments()[0];  
                       }  

dt.Columns.Add(newDataColumn(GetProperty.Name, colType));  
                   }  
               }  

DataRowdr = dt.NewRow();  

foreach (PropertyInfopinfoin columns)  
               {  
dr[pinfo.Name] = pinfo.GetValue(Record, null) == null ? DBNull.Value :pinfo.GetValue
                   (Record, null);  
               }  

dt.Rows.Add(dr);  
           }  
returndt;  
       }

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

اکنون روی دکمه Get Result دوبار کلیک (دابل کلیک) کنید و کد زیر را Click event بنویسید.

protectedvoidbtngetResult_Click(object sender, EventArgs e)  
      {  
//linq Query  
var query = from Customer s incust
select s;  

//stored result into datatable
          DataTable dt = LINQResultToDataTable(query);  
//bind gridview
          GridView1.DataSource = dt;  
GridView1.DataBind();  
      } 

بعد از ایجاد عملکرد تبدیل LINQ query result به Data Table، سپس کل کد Default.aspx.cs به صورت زیر خواهد بود.

usingSystem;  
usingSystem.Collections.Generic;  
usingSystem.Data;  
usingSystem.Linq;  
usingSystem.Reflection;  
usingSystem.Web;  
usingSystem.Web.UI;  
usingSystem.Web.UI.WebControls;  

namespaceConvertLinqResultToDataTable
{  
publicpartialclassDefault : System.Web.UI.Page
    {  

protectedvoidPage_Load(object sender, EventArgs e)  
        {  

        }  


Customer[] cust = new Customer[]  
        {  

new Customer{Name="VithalWadje",City="Mumbai",Address="Boriwali"},  
new Customer{Name="SudhirWadje",City="Latur",Address="Kabansangvi"},  


        };  


protectedvoidbtngetResult_Click(object sender, EventArgs e)  
        {  
//linq Query  
var query = from Customer s incust
select s;  

//stored result into datatable
            DataTable dt = LINQResultToDataTable(query);  
//bind gridview
            GridView1.DataSource = dt;  
GridView1.DataBind();  
        }  



public DataTable LINQResultToDataTable<T>(IEnumerable<T>Linqlist)  
        {  
            DataTable dt = newDataTable();  


PropertyInfo[] columns = null;  

if (Linqlist == null) returndt;  

foreach (T Record inLinqlist)  
            {  

if (columns == null)  
                {  
columns = ((Type)Record.GetType()).GetProperties();  
foreach (PropertyInfoGetPropertyin columns)  
                    {  
                        Type colType = GetProperty.PropertyType;  

if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()  
                        == typeof(Nullable<>)))  
                        {  
colType = colType.GetGenericArguments()[0];  
                        }  

dt.Columns.Add(newDataColumn(GetProperty.Name, colType));  
                    }  
                }  

DataRowdr = dt.NewRow();  

foreach (PropertyInfopinfoin columns)  
                {  
dr[pinfo.Name] = pinfo.GetValue(Record, null) == null ? DBNull.Value :pinfo.GetValue
                    (Record, null);  
                }  

dt.Rows.Add(dr);  
            }  
returndt;  
        }  

    }  

publicclassCustomer
    {  
privatestring _Name, _City, _Address;  

publicstring Name  
        {  
get { return _Name; }  
set { _Name = value; }  
        }  

publicstring City  
        {  
get { return _City; }  
set { _City = value; }  
        }  

publicstring Address  
        {  
get { return _Address; }  
set { _Address = value; }  
        }  

    }  
} 

حالا همه ی logic (استدلال) ها را برای تبدیل LINQ query result به Data Table نوشته ایم، اکنون پروژه را اجرا کنید که صفحه اولیه به صورت زیر خواهد بود:

LINQ Query

روی دکمه Get Result بالا کلیک کنید، سپس LINQ Result به Data Table تبدیل خواهد شد و به صورت زیر درGrid view نمایش داده می شود.

LINQ Query

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=16351
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
محمد نجفی
مطالب بیشتر
برچسب ها:

نظرات

0 نظر در مورد تبدیل نتایج LINQ Query به DataTable در ASP.NET

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

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

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