PDA

View Full Version : استفاده از LNQ To DataSet جهت اخذ Query



piroozman
دوشنبه 11 آبان 1388, 21:45 عصر
در پروژه ای مبتنی بر ADO.NET از کلاس های DataSet، DataTable و . . . استفاده شده است. تصمیم بر این است که با استفاده از دستورات LINQ عمل پرس و جو بر روی DataTable انجام بگیرد. اما قبل از هر چیز مختصری از هدفی که قرار است با این کار برآورد شود را برای شما توضیح می دهم:
با استفاده از دستور زیر:


this.orderTableAdapter.Fill(this.agreementDataSet. Order);
با استفاده از تابع Fill، DataTable ی به نام Order از DataSet ی به نام agreementDataSet پر می شود. می خواهم یک query بر اساس یکی از ستونهای جدول order که دارای دو ستون ordername و OrderId است گرفته شود.
1- اولا این که چگونه با استفاده از linq می توانم براساس ستون orderName یک پرس و جو روی OrderDataTable انجام دهم. به طور مثال می خواهم شرط زیر نیز اعمال شود:
Where orderName='Jon'
2- پس از این کار قصد دارم با استفاده از دستور زیر:

this.agreementDataSet.Order.Clear();

محتویات جدول Order را خالی کرده و سپس آنرا با query به عمل آمده پر کنم.
امیدوارم تونسته باشم سئوال خود را درست مطرح کرده باشم.

piroozman
چهارشنبه 13 آبان 1388, 08:38 صبح
یافته های خودم:
با مطالعه و جستجو در اینترنت دریافتم که بهتره از کدهای زیر برای برآورده شده منظورم استفاده کنم:

AgreementDataSet.OrderDataTable dtOrder= new AgreementDataSet.OrderDataTable()
با استفاده از کد فوق یک جدول از کلاس مربوطه نمونه سازی می شود سپس با استفاده از کد زیر هر انچه داخل جدول Order است را به داخل جدول فوق کپی می کنم:

dtOrder=( AgreementDataSet.OrderDataTable)this.agreementData Set.Order.Copy();
حالا وقت اینه که از جدول جدیدی که نمونه سازی شده یک query اخذ کنم. بنابراین از کد زیر استفاده کردم:


var query= from q in dtOrder
where q.OrderName=="textBox1.Text"
select q;
قابل ذکر است که کد فوق تا زمانی که از متغییر query استفاده نشود، اجرا نخواهد شد. حالا وقت این رسیده که داده های قبلی را از حافظه پاک کنیم:

this.agreementDataSet.Order.Clear();

حالا جدول Order آماده است که داده های جدید را بر اساس query اخذ شده بپذیرد. باید به شکل زیر عمل کنیم:

query.CopyToDataTable(this.agreementDataSet.Order, LoadOption.OverwriteChanges);
شما می توانید از توابع Contains(string value) یا StartsWhit(string value)و یا EndsWhit(string value) به جای دو مساوی (==) در شرط قسمت where استفاده کنید. با این کار می توانید دستورات مربوط به LIKE موجود در T-Sql را شبیه سازی کنید. منظورم به ترتیب : like '%strig value%' و like 'string value%' و نهایتاً like '%string value'
اگر ایده ی بهتری دارید ممنون می شم به بنده ارائه نمایید.
موفق باشید