PDA

View Full Version : جستجوی پیشرفته



phpphp7
سه شنبه 01 دی 1394, 23:28 عصر
سلام دوستان

من قصد دارم که یک جستجوی پیشرفته در سایتم مثل عکس زیر درست بکنم :

http://up.vbiran.ir/uploads/39107145081723517184_search.png

داده ها توسط json به کنترلر ارسال شده است و کنترلر به صورت زیر است :



[HttpPost]
public ActionResult AdvanceSearch(string Title, string FullTxt, string FirstDate, string LastDate, string NewsType)
{
return View();
}



تنها مشکل من اینه که نمیدونم چه query بنویسم . اگر امکانش هست در این زمینه بنده را راهنمایی بکنید
ممنون

مهدی کرامتی
چهارشنبه 02 دی 1394, 12:31 عصر
اول امضای تابع ActionResult تون رو به این شکل تغییر بدید:


[HttpPost]
public ActionResult AdvanceSearch(string Title = "", string FullTxt = "", string FirstDate = "", string LastDate = "", string NewsType = "")

{
return View();
}



فرض کنیم اسم ستون ها در جدول مربوطه هم نام همین پارامترها باشه و نام جدول نیز News باشه. در این صورت Query چیزی مانند زیر خواهد بود:

var result = (from p in db.News
where (p.Title.Contains(Title) || Title = "")
&& (p.FullTxt.Contains(FullTxt) || FullTxt = "")
&& (p.NewsType == NewsType || NewsType = "")
&& (p.FirstDate >= FirstDate || FirstDate = "")
&& (p.LastDate <= FirstDate || LastDate = "")
).ToList();

phpphp7
چهارشنبه 02 دی 1394, 14:18 عصر
اول امضای تابع ActionResult تون رو به این شکل تغییر بدید:


[HttpPost]
public ActionResult AdvanceSearch(string Title = "", string FullTxt = "", string FirstDate = "", string LastDate = "", string NewsType = "")

{
return View();
}



فرض کنیم اسم ستون ها در جدول مربوطه هم نام همین پارامترها باشه و نام جدول نیز News باشه. در این صورت Query چیزی مانند زیر خواهد بود:

var result = (from p in db.News
where (p.Title.Contains(Title) || Title = "")
&& (p.FullTxt.Contains(FullTxt) || FullTxt = "")
&& (p.NewsType == NewsType || NewsType = "")
&& (p.FirstDate >= FirstDate || FirstDate = "")
&& (p.LastDate <= FirstDate || LastDate = "")
).ToList();

سلام
خیلی ممنون بابت پاسخگویی شما

اما برنامه از or های داخل پرانتز ایراد میگرفت

عکس ارور :

http://up.vbiran.ir/uploads/4032514508704968146_search.png
حالا من برای تست اومدم و کدهای or داخل پرانتز رو حذف کردم

http://up.vbiran.ir/uploads/38465145087056542084_test.png
قابل ذکر هست که نه با and کار کرد و نه با or

اصلا result خالی هستش و هیچ چیز رو بر نمیگردونه . هرکاری هم میکنم نمیشه .

برای تست اومدم فیلد های "از تاریخ" و "تا تاریخ " و "نوع خبر" رو حذف کردم . اما با همون "عنوان" و "متن کامل" هم کار نکرد !

mze666
پنج شنبه 03 دی 1394, 07:28 صبح
Title = "" اشتباه هستش از == باید برای شرط برابری استفاده کنید. به نظرم بیشتر روی C# کار کنید

hp1361
پنج شنبه 03 دی 1394, 15:24 عصر
اول امضای تابع ActionResult تون رو به این شکل تغییر بدید:


[HttpPost]
public ActionResult AdvanceSearch(string Title = "", string FullTxt = "", string FirstDate = "", string LastDate = "", string NewsType = "")

{
return View();
}



فرض کنیم اسم ستون ها در جدول مربوطه هم نام همین پارامترها باشه و نام جدول نیز News باشه. در این صورت Query چیزی مانند زیر خواهد بود:

var result = (from p in db.News
where (p.Title.Contains(Title) || Title = "")
&& (p.FullTxt.Contains(FullTxt) || FullTxt = "")
&& (p.NewsType == NewsType || NewsType = "")
&& (p.FirstDate >= FirstDate || FirstDate = "")
&& (p.LastDate <= FirstDate || LastDate = "")
).ToList();

سلام

چرا [HttpPost] استفاده کنیم وقتی که قرار نیست تغییری در سمت سرور ایجاد بشه؟

مهدی کرامتی
پنج شنبه 03 دی 1394, 18:29 عصر
Title = "" اشتباه هستش از == باید برای شرط برابری استفاده کنید. به نظرم بیشتر روی C#‎‎‎‎ کار کنید
فرمایش ایشان صحیح است. کد اصلاح شده:
var result = (from p in db.News
where (p.Title.Contains(Title) || Title == "")
&& (p.FullTxt.Contains(FullTxt) || FullTxt == "")
&& (p.NewsType == NewsType || NewsType == "")
&& (p.FirstDate >= FirstDate || FirstDate == "")
&& (p.LastDate <= FirstDate || LastDate == "")
).ToList();

phpphp7
پنج شنبه 03 دی 1394, 19:55 عصر
فرمایش ایشان صحیح است. کد اصلاح شده:
var result = (from p in db.News
where (p.Title.Contains(Title) || Title == "")
&& (p.FullTxt.Contains(FullTxt) || FullTxt == "")
&& (p.NewsType == NewsType || NewsType == "")
&& (p.FirstDate >= FirstDate || FirstDate == "")
&& (p.LastDate <= FirstDate || LastDate == "")
).ToList();





سلام

ممنون بابت راهنمایی

مشکل من تنها این هست که فقط و فقط میخوام اگه یکی از 5 فیلد تکمیل بشه ، برنامه کار کنه . یعنی الزامی به وارد کردن همه موارد نباشه

مهدی کرامتی
پنج شنبه 03 دی 1394, 22:52 عصر
چرا شما دقت نمی کنی؟

کدی که من برای شما گذاشتم دقیقا همین شرایط رو داره. یعنی اگر فیلدی مقدارش وارد شده بود بر اساس اون جستجو می کنه، وگرنه قسمت دوم شرط (مثلا Title == "") باعث میشه کل اون خط در where نادیده گرفته شود.