PDA

View Full Version : سوال: select کردن جدول در معماری سه لایه با تکنیک LINQ



erfan_urchin
جمعه 13 اردیبهشت 1392, 13:28 عصر
سلام
من برای واکشی جدول از SQl به روش sqlconnection تو لایه Business یک کلاس ساختم به اسم dboperation و متد زیر رو نوشتم
public static DataTable select()
{
SqlDataAdapter sd = new SqlDataAdapter("select * from t3",sc);
DataTable dt = new DataTable();
sd.Fill(dt);
return dt;
}
و سپس تو لایه DataAccess یک کلاس ساختم به اسم employee متد زیر رو نوشتم
public DataTable Select()
{
return dboperation.select();
}
و در آخر تو رویداد Button_Click یا همون لایه presentation کد زیر رو نوشتم
private void btnselect_Click(object sender, EventArgs e)
{
employee em = new employee();
DataTable dt = new DataTable();
dt=em.Select();
dataGridView1.DataSource = dt;
}
خب این روش درست جواب داد و کاملا کار کرد اما حالا میخوام همین کارو با تکنیک linq بنویسم
من برای واکشی جدول از SQl به روش linq ، تو لایه Business متد زیر رو نوشتم
public static void select()
{
Table<employee> t1 = db.GetTable<employee>();
var q1 = from index in t1 select index;
}
همونطور که تو کد هایی که به روش SqlConnection نوشتم دیدید توی لایه Business اومدم یک DataTable رو return کردم اما نمیدونم توی linq باید چیکار کنم؟؟ چه چیزیو return کنم که تو dataaccess ازش استفاده کنم و دوباره اونو return کنم؟؟؟
نمیدونم شایدم نباید چیزی رو return کنم و یه راه دیگه رو برم:متفکر:
چیکار کنم؟
خواهشا کمکم کنید

_behnam_
جمعه 13 اردیبهشت 1392, 13:59 عصر
هم میتونید متودی بنویسید که پارامتری از نوع دیتاگرید داشته باشه که گرید رو توی متود ست کنید و هم میتونید مقدار برگشتی متد رو از نوع List<table>d بزارید

khayyams.votary
جمعه 13 اردیبهشت 1392, 14:21 عصر
چرا برا این کار از DataContext استفاده نمکنی که به ازای هر جدولی که داری یک کلاس برات ایجاد کنه و بتونی در موقع واکشی نوع برگشتی رو لیستی از اون کلاس جدول بدی هر موقع هم خواستی از لیست استفاده منی و راحت هم نمایشش بدی و کلی امکانات دیگه مه کار رو برات سریع تر و راحتتر میکنه؟
اگه خواستی پیام بده تا ی نمونه برنامه بزارم ببینی

مهدی هادیان2
جمعه 13 اردیبهشت 1392, 15:03 عصر
بسم الله الرحمن الرحیمم
با سلام
به نظرم بهتر باشه. از نو در مورد سه لایه کردن برای این تکنولوژی فکر کنیم. چون کارآیی اون خیلی بهتره.
اگه قرار باشه مدام بخواهیم با یاد ADO.Net از لینک استفاده کنیم از خیلی از قابلیت های اون رو از دست خواهیم داد.
موفق باشید.

Mahmoud.Afrad
جمعه 13 اردیبهشت 1392, 16:31 عصر
درکتون از لایه ها اشتباست. یا بهتر بگم اسم لایه ها رو اشتباه درک کردید.
اگر از LinqToSql و یا EF استفاده میکنید که همین قسمت میشه لایه DataAccess.
در لایه Business میتونید به اینصورت بنویسید:

public static IEnumerable<employee> select()
{
IEnumerable<employee> q1 = from index in db.GetTable<employee>()
select index;
return q1;
}

در لایه Presentation(UI) هم ازش استفاده کنید.

erfan_urchin
جمعه 13 اردیبهشت 1392, 18:28 عصر
درکتون از لایه ها اشتباست. یا بهتر بگم اسم لایه ها رو اشتباه درک کردید.
اگر از LinqToSql و یا EF استفاده میکنید که همین قسمت میشه لایه DataAccess.
در لایه Business میتونید به اینصورت بنویسید:

public static IEnumerable<employee> select()
{
IEnumerable<employee> q1 = from index in db.GetTable<employee>()
select index;
return q1;
}

در لایه Presentation(UI) هم ازش استفاده کنید.

واقعا ممنونم ازتون
من میخواستم q1 رو return کنم اما نمیدونستم باید به جای void چی بنویسم که شما گفتید IEnumerable و کاملا هم درست بود
بازم ممنونم