PDA

View Full Version : جستجو براساس انتحاب کاربر



Yanehsar
چهارشنبه 25 تیر 1399, 19:27 عصر
سلام دوستان وقت بخیر
برای ایجاد یه جستجو پیشرفته با استفاده از linq چیکار باید کرد ؟؟؟؟
چندین حالت انتخاب به کاربر داده میشه با استفاده از کامبوباکس های مختلف که امکان داره کاربر انتخاب کنه یا نکنه در روش های قدیم با دستور sql رو رشته ای تعریف می کردیم و باید دائما رشته رو + جمع می کردیم داخل linq به چه صورت هستش ؟؟؟؟
ممنون از راهنمائی دوستان

ShayanFiroozi
چهارشنبه 25 تیر 1399, 20:54 عصر
سلام دوست گرامی ،

اگر نمونه کد میذاشتین بهتر بود ، اما در LINQ شما هم میتونین از AND و OR استفاده کنین و هم خاصیت FirstOrDefault() که اگر کاربر انتخاب کرده بود مقدار رو در نظر میگیره اگر نه string.Empty در نظر گرفته میشه.

Yanehsar
چهارشنبه 25 تیر 1399, 21:41 عصر
سلام دوست گرامی ،

اگر نمونه کد میذاشتین بهتر بود ، اما در LINQ شما هم میتونین از AND و OR استفاده کنین و هم خاصیت FirstOrDefault() که اگر کاربر انتخاب کرده بود مقدار رو در نظر میگیره اگر نه string.Empty در نظر گرفته میشه.

متاسفانه نمونه کد ندارم که دچار خطا بشم
and و OR برای وقتی هستش که ما دقیقا از اول بدونیم کاربر چه جستجوی انجام میده
مثال عرض میکنیم ما اطلاعاتی رو ثبت کردیم داخل ویو ما اطلاعات مانند جنست ، تاهل ، تعداد فرزند و... باشه
یکبار کاربر جستجوی انجام میده که جنسیت زن را گزارش بده خوب جستجو هم مشخصه
یکبار کاربر میادش میگه خانم های متاهل رو گزارش بده الان با شرط من تغییر کنه یعنی and بزارم
یکبار کاربر میگه افراد متاهل(بدون در نظر گرفتن جنسبت)
و....
حالت های مختلف جستو رو باید داشته باشه داخل روش های قدیمی یه همچنین کاری میکردیم
کد زیر کپی شده هستش کاری که کرده از چک باکس استفاده کرده اگر چک خورده باشه به رشته Sqlcommand اضافه میکنه(البته نمونه کد vb هستش)

dim strsql as string="select * from soorat where "
if rbtSalYes.Checked=true
strsql+=" sal ='" cboSal.text+"' and "
endif
if chkTarikhJalase.checked=true
strsql+=" tarikh>='"txtAzTarikh.text+"' and tarikh<=' "+txtTaTarikh.text "' and "
endif
if chkSharh.check=ture
strsql+="' sharh='"+txtSharh.text+"' and "



حالا برای linq چیکار باید کرد ؟

ShayanFiroozi
چهارشنبه 25 تیر 1399, 23:50 عصر
این کلاس رو در نظر بگیرید و فرض کنید بانک اطلاعاتی شماست :


public enum Gender
{
Not_Specified = -1,
Male = 0,
Female = 1


}


private class Person
{
public string Name { get; set; }
public string Family { get; set; }
public int Age { get; set; }
public Gender Gender { get; set; }
}



حالا چند نمونه با مقدار از روی اون میسازیم :




List<Person> People = new List<Person>();


People.Add(new Person() { Name = "Shayan", Family = "Firoozi", Gender = Gender.Male, Age = 35 });
People.Add(new Person() { Name = "A", Family = "B", Gender = Gender.Female, Age = 33 });
People.Add(new Person() { Name = "C", Family = "D", Gender = Gender.Female, Age = 18 });




فرض کنید اینها مقادیری هستند که از کاربر گرفته میشن ، که میتونن مقدار داشته باشند یا خالی باشند :




string _filter_name = "Shayan";
string _filter_family = "";
Gender _filter_gender = Gender.Not_Specified;
int filter_age = 35;



به این شکل روی اونا کوئری میزنیم :


List<Person> myList = People.Where(p => _filter_name.Length == 0 || p.Name == _filter_name)
.Where(p => _filter_family.Length == 0 || p.Family == _filter_family)
.Where(p => _filter_gender == Gender.Not_Specified || p.Gender == _filter_gender)
.Where(p => filter_age == 0 || p.Age == filter_age).ToList();

Mahmoud.Afrad
جمعه 27 تیر 1399, 03:47 صبح
از متد AsQueryable استفاده کنید و بعد با بررسی ورودی ها شرط ها را اعمال کنید
روش اول لینک زیر
https://barnamenevis.org/showthread.php?471215-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AF%D8%B1-Entity-FrameWork-(%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%88-%D9%81%DB%8C%D9%84%D8%AA%D8%B1-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A7%D8%B2-%D9%82%D8%A8%D9%84-%D9%84%D9%88%D8%AF-%D8%B4%D8%AF%D9%87)