ورود

View Full Version : سوال: چگونگی استفاده از نتیجه یک کوئری linq در سرتاسر فرم یا برنامه



ehsan123
دوشنبه 23 بهمن 1391, 17:08 عصر
چطور میشه یه کوئری linq مثل کد زیر و تو یک تابع یا کلاس تو برنامه تعریف کرد تا بعد بشه از نتیجه اون تو رویداد مثلا textBox1_TextChanged استفاده کرد
Entities1 db = new Entities1();
var s = from rows in db.Table
select s;
هدف اینه که مثلا تو رویداد TextChanged با وارد کردن هر کارکتر توسط کاربر برنامه هی، نر به بانک وصل شه
یک دفعه وصل شه، بعد تو کل فرم ازش استفاده شه

mostafa.hnz
دوشنبه 23 بهمن 1391, 20:21 عصر
سلام
می تونی یه کلاس تعریف کنی ،بعد یه متغیر IENUMERABLE تعریف کنی از نوع استاتیک
property همین متغیر رو هم تعریف کنی
بعد نتیجه Linq رو توی همین متغیر بریزی
و بعد در هر قسمت از برنامه از اون استفاده کنی

HAMRAHSOFT.IR
دوشنبه 23 بهمن 1391, 21:59 عصر
ممکن بیشتر توضیح بدید ویا یکنمونه قرار بدبدچون منم این مشکل دارم

ehsan123
دوشنبه 23 بهمن 1391, 22:02 عصر
سلام
میشه نمونه کد بگذارید
ممنون

mostafa.hnz
دوشنبه 23 بهمن 1391, 22:28 عصر
این کلاسیه که تعریف کردم
public class Class1
{
public static IEnumerable<khone> khone;
public static IEnumerable<khone> KHONE
{
set { khone = value; }
get { return khone; }
}

یه اینترفیس تعریف کردم و یه property برای مقدار دهی و گرفتن مقدار آن

حالا مثلا توی فرم 1 یه جستجو با linq می نویسم ،نتیجش رو می ریزیم توی این متغیر از نوع استاتیک
DataClasses1DataContext d = new DataClasses1DataContext();
var khone= (from i in d.khones
where i.esm == "mostafa"
select i).Distinct();
Class1.khone = khone;

الان متغیر ما مقدار دهی شده و چون ار نوع استاتیک هست می تونیم توی کل فرم هامون ازش استفاده کنیم
مثلا اگه بخوام نتیجه رو توی یه datagridview در فرم 2 نشون بدیم اینجوری می نویسیم

dataGridView1.DataSource = Class1.khone;
جایی مشکل داشتید بگید بیشتر توضیح بدم

Mahmoud.Afrad
دوشنبه 23 بهمن 1391, 22:31 عصر
یک IEnumerable (به نام allRecords) از نوع مناسب در سطح کلاس تعریف کنید. هر جا خواستید مقداردهی کنید (مثلا در لود فرم یا سازنده فرم).
برای فیلتر کردن هم یک IEnumerable دیگه(resultRecords) تعریف کرده برای نگهداری مقادیر فیلتر شده.
در هنگام فیلتر کردن هم کافیه روی allRecords سلکت بزنید و نتیجه رو در resultRecords ذخیره کنید.

IEnumerable<Table> allRecords;
IEnumerable<Table> resultRecords;
private void Form1_Load(object sender, EventArgs e)
{
// Get all Records
using (Entities1 db = new Entities1())
{
allRecords = from record in db.Table
select record;
}
}

private void button4_Click(object sender, EventArgs e)
{
// Filtering (example)
resultRecords = allRecords.Where(item => item.Name == textBox1.Text);
dataGridView1.DataSource = resultRecords;
}

نمونه هم در امضام هست. جستجوی پیشرفته در entity Framework .