PDA

View Full Version : سوال: جستجوی پیشرفته با تعداد فیلد بالا



jaykob
سه شنبه 12 خرداد 1394, 12:44 عصر
سلام دوستان

من یک جستجوی پیشرفته دارم که قراره یکسری دانش آموز رو نشون بده ولی سرچ من نزدیک به ۲۰ تا فیلد داره مثلا از سن ... تا سن ... و چند مورد دیگه حالا از این فیلد های مد نظر برای جستجو بعضی می تونن خالی باشن و بعضی نمی تونن . من چطور کوئری می تونم بنویسم که بهترین نتیجه رو داشته باشم ؟ اصلا ساختارش نمی آد توی ذهنم که چی باید بنویسم ...

ممنون

mehdin69
سه شنبه 12 خرداد 1394, 14:07 عصر
سلام
یه View بساز توی Sql از چیزایی که می خوایی و نمی خوایی از روی View یه ViewModel بساز بعد چیزایی که اجباری هستن رو بذار تو If اگه پر بودن نتیجه View رو با ذکر Where نمایش بده

salar IT man
سه شنبه 12 خرداد 1394, 15:46 عصر
اگر از EF استفاده میکنید میتوانید از ()AsQueryable استفاده کنید و کوئری خودتان را آماده ارسال به دیتابیس کنید . مثال واقعی آن در پروژه خودم هست . در لینک زیر متد DataList
https://github.com/rabbal/My-Golden-City-Shop/blob/master/ServiceLayer/EFServices/ProductService.cs

یا اگر نیاز است که امکان انتخاب Operator هم وجود داشته باشد میتوانید از این مقاله استفاده کنید.http://www.dotnettips.info/post/1380/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%81%D8%B1%D9%85-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%D9%88%DB%8C%D8%A7-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-expression-%D9%87%D8%A7

r4hgozar
سه شنبه 12 خرداد 1394, 18:53 عصر
سلام اقای سالار.


var selectedProducts =
_products.AsNoTracking()
.Include(a => a.Category)
.Include(a => a.Values)
.Include(a => a.Images)
.AsQueryable();

میشه این خط کذ و مخصوصا AsNoTracking رو بگین واسه چیه؟؟
یه سوال دیگه هم اینه که چرا از Automapper استفاده نکردین؟

salar IT man
سه شنبه 12 خرداد 1394, 21:59 عصر
سلام اقای سالار.


var selectedProducts =
_products.AsNoTracking()
.Include(a => a.Category)
.Include(a => a.Values)
.Include(a => a.Images)
.AsQueryable();

میشه این خط کذ و مخصوصا AsNoTracking رو بگین واسه چیه؟؟
یه سوال دیگه هم اینه که چرا از Automapper استفاده نکردین؟

سلام.
متد AsNoTracking را برای ReadOnly کردن اطلاعات واکشی شده استفاده شده و این امر باعث میشود که EF آنها را وارد سیستم ردیابی خود نکند و برای این حالت که قرار است صرفا اطلاعات نمایش داده شود بهینه است.
قسمت Include ها هم برای اعمال Eager Loading اعمال شده است. سری آموزشی EF http://www.dotnettips.info/learningpaths/details/2
خیر از AutoMapper در این پروژه استفاده نکرده ام. ولی توصیه میکنم استفاده کنید. تمیز تر خواهد شد کارتان و خیلی امکانات زیادی در اختیارتان قرار خواهد داد. در لینک زیر
http://www.dotnettips.info/courses/details/16

HOSSEINONLINE7
پنج شنبه 14 خرداد 1394, 10:39 صبح
سلام من اینطوری استفاده میکنم .

اول یک IQueryable تعریف میکنم تا نتایج هر فیلد را جدا بهش اضافه کنم و در آخر یکجا نمایش بدم .
IQueryable<Factor> factorQuery = _factor.AsQueryable();


بعد هم چک میکنم اگر هر فیلد خالی نبود کوئری اون را میگیرم بهش اضافه میکنم

if (!string.IsNullOrEmpty(txtName))
{
factorQuery = _factor.Where(n => n.UserInformation.Name.Contains(txtName));

}
if (!string.IsNullOrEmpty(txtFamily))
{
factorQuery = _factor.Where(n => n.UserInformation.Family.Contains(txtFamily));

}
if (!string.IsNullOrEmpty(txtMobile))
{
factorQuery = _factor.Where(n => n.UserInformation.ApplicationUser.UserName.Contain s(txtMobile));

}
if (!string.IsNullOrEmpty(txtFlowCode))
{
factorQuery = _factor.Where(n => n.FollowCode.Contains(txtFlowCode));

}

در آخر نمایش میدم .