PDA

View Full Version : ساخت شرط اختیاری در LINQ



HosseinProgrammer
دوشنبه 13 خرداد 1392, 05:54 صبح
با سلام.
معادل کد زیر در linq به چه صورت است؟
هدف ساخت فرم جستجویی است که می تواند روی چند فیلد عملیات جستجو وارد شود. ولی وارد کردن تمام فیلدها اختیاری است.
با تشکر

string str = "";
if(a!="")
str += "f1 == a";
if(b!="")
str += " && f2 == b";
if(c!="")
str += " && f3 == c";

select f1, f2, f3 from p
where str;

_behnam_
دوشنبه 13 خرداد 1392, 06:18 صبح
سلام دوست عزیز.
میتوانید or بگذارید در قسمت Where
"خوب دیگه or زمانی درست است که حداقل یک خروجی درست باشد"
پس اگه حتی بر اساس یک فیلد هم رکوردی پیدا شد بهتون برمیگردونه

var query = from allField in db.tbl_mytbls
where allField.clmn_id == "xxxxxx" || allField.clmn_incode != ""
select allField;

HosseinProgrammer
دوشنبه 13 خرداد 1392, 06:30 صبح
سلام دوست عزیز.
میتوانید or بگذارید در قسمت Where
"خوب دیگه or زمانی درست است که حداقل یک خروجی درست باشد"
پس اگه حتی بر اساس یک فیلد هم رکوردی پیدا شد بهتون برمیگردونه

var query = from allField in db.tbl_mytbls
where allField.clmn_id == "xxxxxx" || allField.clmn_incode != ""
select allField;

ولی من میخوام وقتی مثلا دو تا فیلد در جستجو توسط کاربر وارد شده با هم AND بشه نه OR ! و وقتی که یک فیلد وارد شده فقط یک فیلد جستجو بشه. (در این حالت حرف شما درسته.)
برای بیش از یک فیلد جستجو OR کار رو خراب میکنه! چون میخوام همه فیلد ها در جستجو تاثیر داشته باشند. مگر اینکه فیلدهای مرتبط با هم OR شوند و سپس همه با هم AND شوند. بجز این روش راه دیگری هم هست؟
با تشکر

13601360
دوشنبه 13 خرداد 1392, 09:19 صبح
شما بعد از اینکه Select زدید بدون شرط، روی خروجی کوئری شرط where رو اعمال کنید
لینک پایین رو ببینید
http://www.foliotek.com/devblog/linq-for-search-queries-with-multiple-optional-parameters

tooraj_azizi_1035
دوشنبه 13 خرداد 1392, 10:50 صبح
شرط where شما Dynamic هست باید از Dynamic LINQ استفاده کنید:http://blog.nitriq.com/HowToCreateALinqStatementFromAString.aspx

khayyams.votary
دوشنبه 13 خرداد 1392, 13:34 عصر
bool F1, F2, F3;
var q = Db.Base_Ts.Where(x=>(F1?x.Base_ID=='value':true)&&(F2?x.Base_Name=='value':true)&&(F3?x.Base_IsActive=='value':true));
dost man shoma mitonid az in ravesh ham estefade konid ke barae har kodom az field haee ke darid yek motagair tarif konid ke ba check kardan on motavajeh beshin ke aya bayad dar jostejo sharkat konad ya na.
age tozihate bishtari lazem dashtin plz payam khososi bedin ta motavajeh sham.
movafag bashid

Mahmoud.Afrad
دوشنبه 13 خرداد 1392, 13:49 عصر
این هم یک نمونه (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=1565318&viewfull=1#post1565318).