PDA

View Full Version : سوال: دستور فیلتر به روش Entity Framework



farzadkamali
چهارشنبه 29 مرداد 1393, 14:40 عصر
با سلام
فیلتر در EF به روش زیر انجام میشه.(کد زیر فیلتر بر اساس نام هست)


var qsreach = db.members.Where(i => i.membername.Contains( textBox1.Text);
dataGridView1.DataSource = qsreach.ToList();



مشکل اینجاست که اگر نوع فیلد در جدول از نوع عددی(int) باشه. جواب نمیده و حتماً باید نوع فیلد رشته باشه. من میخوام فیلتر رو بر اساس کدعضویت بدم که از نوع int هست.
چه باید کرد؟

parvizwpf
چهارشنبه 29 مرداد 1393, 19:00 عصر
یعنی شما میخواهید contains روی اعداد بزنید؟

farzadkamali
چهارشنبه 29 مرداد 1393, 22:07 عصر
یعنی شما میخواهید contains روی اعداد بزنید؟

میخوام معادل این دستور فیلتر رو برای فیلدهای عددی به کار ببرم. (به عبارت ساده تر بر اساس ش عضویت فیلتر کنم).

plus
چهارشنبه 29 مرداد 1393, 23:00 عصر
Contains برای بررسی وجود یک رشته در رشته دیگه استفاده میشه. مثلا رشته Framework مقدار work رو شامل میشه.
کاری که شما میخواین بکنین مقایسه برابر بودن دو عدد هست.ابتدا باید مقدار textbox که به صورت رشته هست رو به عدد تبدیل کنید و با متد Equals یا عملگر == مقایسه رو انجام بدین:

int enteredMemberId;
if (int.TryParse(textBox1.Text, out enteredMemberId)) {
var qsreach = db.members.Where(i => i.memberId.Equals(enteredMemberId));
dataGridView1.DataSource = qsreach.ToList();
}
else {
MessageBox.Show("Invalid member id.");
}

فرض بر این بوده شما ستون عددی با نام memberId دارین.

farzadkamali
چهارشنبه 29 مرداد 1393, 23:25 عصر
Contains برای بررسی وجود یک رشته در رشته دیگه استفاده میشه. مثلا رشته Framework مقدار work رو شامل میشه.
کاری که شما میخواین بکنین مقایسه برابر بودن دو عدد هست.ابتدا باید مقدار textbox که به صورت رشته هست رو به عدد تبدیل کنید و با متد Equals یا عملگر == مقایسه رو انجام بدین:

int enteredMemberId;
if (int.TryParse(textBox1.Text, out enteredMemberId)) {
var qsreach = db.members.Where(i => i.memberId.Equals(enteredMemberId));
dataGridView1.DataSource = qsreach.ToList();
}
else {
MessageBox.Show("Invalid member id.");
}

فرض بر این بوده شما ستون عددی با نام memberId دارین.

این کد جست و جوی دقیق رو انجام میده. در حالی که من می خوام فیلتر مثل دستور like در sql انجام بشه. یعنی با وارد کردن عدد 1 ، تمامی رکوردهایی که با 1 شروع میشن یا شامل میشه رو برگردونه.

محمد آشتیانی
پنج شنبه 30 مرداد 1393, 03:18 صبح
سلام
همونطور که دوستان فرمودند ، Contains روی رشته ها عمل میکنه ، ضمن اینکه عملگر Like توی TSql هم فقط در حالت زیر روی اعداد عمل میکنه که در این شرایط فرقی با عملگر = نداره. (منظور اینه که باید عین عدد جلوی Like قرار بگیره و نمیتونید از% هم استفاده کنید برای اعداد)


SELECT * FROM YourTable WHERE id LIKE 1234



موفق باشید.

farzadkamali
پنج شنبه 30 مرداد 1393, 09:03 صبح
درسته. متوجه شدم. از Contains که بگذریم.
یعنی میفرمایید در تکنولوژی Entity Framework تحت هیچ شرایط نمیشه این کار رو انجام داد؟:متفکر:

plus
پنج شنبه 30 مرداد 1393, 12:28 عصر
ازونجایی که Query های نوشته شده به SQL تبدیل میشن، شما باید ابتدا با استفاده از SqlFunctions مقدار عدد مورد نظر رو به رشته تبدیل کنید و بعد از Contains استفاده کنید:

var idString= textBox1.Text;
var qsreach = db.members.Where(i =>SqlFunctions.StringConvert((double)i.memberId).Con tains(idString));
dataGridView1.DataSource = qsreach.ToList();