PDA

View Full Version : سوال: جستجوی شرطی در Entity



siolishe
یک شنبه 06 دی 1394, 00:05 صبح
سلام
من یه فرم جستجوی پیشرفته دارم که کد مربوط به selectش بصورت زیره:

var datasource = from source in db.Files
where
(source.Name == null || source.Name.Contains(name)) &&
(source.FamilyName == null || source.FamilyName.Contains(familyname)) &&
(source.Father == null || source.Father.Contains(father)) &&
(source.IDNumber == null || source.IDNumber.Contains(idnumber)) &&
(source.NationalID == null || source.NationalID.Contains(NationalID)) &&
(source.Tel == null || source.Tel.Contains(Tel)) &&
(source.Address == null || source.Address.Contains(Address)) &&
(source.Description == null || source.Description.Contains(Description)) &&
(CaseNumber == null || source.CaseNumber == (CaseNumber)) &&
(Type == "" || source.Type == (Type)) &&
(source.CaseName == null || source.CaseName.Contains(Casename)) &&
(Condition == null || source.Condition == Condition) &&
(source.AccountNumber == null || source.AccountNumber.Contains(AccountNumber)) &&
(Edeafrom == null || Edeato == null || Edeafrom <= source.Edea && source.Edea <= Edeato) &&
(Momtazfrom == null || Momtazto == null || Momtazfrom <= source.Momtaz && source.Momtaz <= Momtazto) &&
(Tempfrom == null || Tempto == null || Tempfrom <= source.Temp && source.Temp <= Tempto) &&
(Finalfrom == null || Finalto == null || Finalfrom <= source.Final && source.Final <= Finalto) &&
(Paid == null || source.Paid == Paid)
select source;


توی یه سری از فیلدها کاربر میتونه بازه مورد نظرشو وارد کنه مثلا : مقدار Final بین 100 تا 1000
حالا سناریو اینجوریه که اگه کاربر یکی از فیلدهای بازه رو وارد کرد مثلا : Final بزرگتر از 100 ، بصورت خودکار کلیه مقادیر بزرگتر از 100 رو برگردونه یعنی در واقع بیاد بصورت داینامیک شرط select رو تغییر بده جوری که نیاز به وارد کردن مقدار انتهایی بازه نباشه
کسی میتونه رهنمایی کنه؟

Mahmoud.Afrad
یک شنبه 06 دی 1394, 17:20 عصر
برای این کار باید هر شرط رو به طور متوالی و مجزا روی مجموعه اعمال کنی. روش اول جستجویی که در لینک زیر نوشتم رو ببین.
http://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)

siolishe
دوشنبه 07 دی 1394, 00:33 صبح
ممنون
لینکی که ارائه کرده بودین رو دیدم
برای جستجو با تعداد فیلدهای کم مناسبه ولی برای جستجوی من نه
چون تو جستجوی مورد نظر من کاربر باید بتونه جستجوی ترکیبی انجام بده نوشتن همه حالتهای ممکن عملا امکان پذیر نیست!
این امکان وجود نداره که بشه یه تابع مثل تابع زیر نوشت و خروجی اونو توی select قرار داد؟

protected string condition(long? from, long? to, string var)
{
string str = "";
if (from == null && to == null) str += "";
if (from != null && to == null) str += from + "<=" + var;
if (from == null && to != null) str += var + "=<" + to;
if (from != null && to != null) str += from + "<=" + var + "=<" + to;
return str;
}