PDA

View Full Version : سوال: جستجو در دیتابیس و مقدار Null



r0ot$harp
جمعه 10 دی 1389, 01:33 صبح
سلام دوستان .

من یه برنامه دارم که فرمی داره برای جستجو در داخل مشترکین .

جستجو براساس چندین پارامتر (نام - کد اشتراک - تلفن ) انجام می شه .

محتوای جدول مشترکین در دیتابیس شمال ID (int) و ... می باشد .

حالا مشکل اینجاست که وقتی براساس کد اشتراک جستجو می کنم مقدار اگر Null باشه برنامه اررور می ده و در ضمن وقتی هیچ مقداری نمی دی تمام مشترکین رو نمایش نمی ده .

کد بنده :


var Query = (from T in bank.tbl_customers
where T.ID == Convert.ToInt32(Txt_Customer_Search.Text)
select T);

dataGridView1.DataSource = Query;


باتشکر احسان

DrTJ2066
جمعه 10 دی 1389, 03:28 صبح
باید از DefaultIfEmpty استفاده کنی:


var res = (from T in Customers
where T.ID == Convert.ToInt32(Txt_Customer_Search.Text)
select T).DefaultIfEmpty(new Customer{ ID=-1, Name="", Family=""});

یا اینکه موقع ست کردن DataSource کنترل کنی:

dataGridView1.DataSource = Query ?? bank.Customer.NewCustomerRow();

r0ot$harp
شنبه 11 دی 1389, 01:35 صبح
باید از DefaultIfEmpty استفاده کنی:


var res = (from T in Customers
where T.ID == Convert.ToInt32(Txt_Customer_Search.Text)
select T).DefaultIfEmpty(new Customer{ ID=-1, Name="", Family=""});

یا اینکه موقع ست کردن DataSource کنترل کنی:

dataGridView1.DataSource = Query ?? bank.Customer.NewCustomerRow();


سلام دوستان عزیز .

تشکر می کنم دوست عزیز بابت پاسختون .

کد استفاده شده :

var res = (from T in bank.tbl_customers
where T.ID == Convert.ToInt32(Txt_Customer_Search.Text)
select T).DefaultIfEmpty(new tbl_customer {ID=-1 });


dataGridView1.DataSource = res;

اررور دریافت شده :


Unsupported overload used for query operator 'DefaultIfEmpty'.

باتشکر احسان

r0ot$harp
یک شنبه 12 دی 1389, 20:13 عصر
دوستان سلام . کسی نیست پاسخ بنده رو بده ؟؟؟ واقعا گیر کردم .

باتشکر احسان

r0ot$harp
یک شنبه 12 دی 1389, 21:33 عصر
دوستان با تشکر .

جواب رو پیدا کردم .

باید فیلد Int رو به String تبدیل کنید .

شما در دیتابیس فیلد ID از نوع Int هست .

در برنامه اینطوری می شه .


var Query = from T in bank.tbl_customers
where SqlMethods.Like(T.ID.ToString(),Txt_Customer_Searc h.Text + "%")
select T;

dataGridView1.DataSource = Query;

که تنها فرق این کد با کد اول تو اینه که ID به T.ID.ToString() تبدیل شده و از SqlMethods.Like استفاده شده .

دوستان برای استفاده از SqlMethods.Like باید NameSpace زیر رو به برنامه اضافه کنید :

using System.Data.Linq.SqlClient;

باتشکر احسان