PDA

View Full Version : دستور linq با شرط های مختلف



Yanehsar
جمعه 19 آذر 1395, 22:25 عصر
سلام دوستان
به چه روشی میتونیم دستورات linq رو با توجه به انتخاب کاربر دستکاری کردش که از کد نویسی فراوان جلوگیری کنیم ؟
تو برنامه odb قدیمی تر از یه رشته برای اینکار استفاده می کردیم الان چی ؟؟؟
کد اصلی

var test=DB.View_tblHeders.Where(p =>p.IDmarkaz == Convert.ToInt32(CbMarkaz.SelectedValue)
&& p.IDsazman == Convert.ToInt32(cbSazman.SelectedValue)
&& p.DateNos.CompareTo(MtxtDateIn.Text) > -1
&& p.DateNos.CompareTo(MtxtDateEnd.Text) < 1);

کدهای متغییر(که البته اشتباه هستش)

if (chBoxpayGroup.Checked == true && chBoxDoctorsGroup.Checked == false)
{
SQL += "&& p.PayGroup == Convert.ToInt32(CbGroupkhadmat.SelectedValue)";
}
else if (chBoxpayGroup.Checked == true && chBoxDoctorsGroup.Checked == true)
SQL += "&& p.PayGroup == Convert.ToInt32(CbGroupkhadmat.SelectedValue) && p.CodeGroupTakhasos == Convert.ToInt32(CbDoctorsTakhasos.SelectedValue)";
else if (chBoxpayGroup.Checked == false && chBoxDoctorsGroup.Checked == true)
SQL += "&& p.CodeGroupTakhasos == Convert.ToInt32(CbDoctorsTakhasos.SelectedValue)";
SQL+=".OrderBy(t => t."+Sorting+");";

Mahmoud.Afrad
جمعه 19 آذر 1395, 22:53 عصر
طبق روش اول لینک زیر که توضیح هم داده ام
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)

Yanehsar
دوشنبه 22 آذر 1395, 21:35 عصر
مرسی از کمک و راهنمائی شما
در خصوص مرتب سازی هم ممنون میشم راهنمائی بفرمائید من چند تا رادیوباتم توئی فرم قرار دادم میخوام براساس اون جستجو کنم

if (radioPaygroup.Checked == true)
Q = Q.ToList().Sort(t => t.PayGroup);
else if (radioDoctorNezam.Checked == true)
Q = Q.ToList().Sort(t => t.DateNos && t.IDnos);
else if (radioPayGroupNezamDate.Checked == true)
Q = Q.ToList().Sort(t => t.DateNos && t.IDnos);
else if (radioDrNezamPaygroup.Checked == true)
Q = Q.ToList().Sort(t => t.DateNos && t.IDnos);
else
Q = Q.ToList().Sort(t => t.DateNos && t.IDnos);

Mahmoud.Afrad
دوشنبه 22 آذر 1395, 23:13 عصر
سعی کنید متد ToList آخرین متدی باشد که فراخوانی میشود.

از متد OrderBy برای مرتب سازی صعودی و OrderByDescending برای نزولی استفاده کنید
if (radioPaygroup.Checked)
Q = Q.OrderBy(t => t.PayGroup);
// ...
dataGridView1.DataSource = Q.ToList();

codedeveloper
سه شنبه 23 آذر 1395, 10:17 صبح
using (var ctx = new SchoolDBEntities())
{
var studentName = ctx.Students.SqlQuery("Select studentid, studentname
from Student where studentname='New Student1'").ToList();

}

Yanehsar
سه شنبه 30 آذر 1395, 21:26 عصر
سعی کنید متد ToList آخرین متدی باشد که فراخوانی میشود.

از متد OrderBy برای مرتب سازی صعودی و OrderByDescending برای نزولی استفاده کنید
if (radioPaygroup.Checked)
Q = Q.OrderBy(t => t.PayGroup);
// ...
dataGridView1.DataSource = Q.ToList();


مرسی از راهنمائی شما
طبق کمک شما اینکار رو انجام دادم ولی مرتب سازی انجام نمیشه !!!!!

var Q = DB.View_tblHeders.AsQueryable();
Q = Q.Where(p =>p.IDmarkaz == Convert.ToInt32(CbMarkaz.SelectedValue)
&& p.IDsazman == Convert.ToInt32(cbSazman.SelectedValue)
&& p.DateNos.CompareTo(MtxtDateIn.Text) > -1
&& p.DateNos.CompareTo(MtxtDateEnd.Text) < 1);
if (chBoxpayGroup.Checked == true && chBoxDoctorsGroup.Checked == false)
Q = Q.Where(p=> p.PayGroup == Convert.ToInt32(CbGroupkhadmat.SelectedValue));
else if (chBoxpayGroup.Checked == true && chBoxDoctorsGroup.Checked == true)
Q=Q.Where(p=> p.PayGroup == Convert.ToInt32(CbGroupkhadmat.SelectedValue) && p.CodeGroupTakhasos == Convert.ToInt32(CbDoctorsTakhasos.SelectedValue));
else if (chBoxpayGroup.Checked == false && chBoxDoctorsGroup.Checked == true)
Q = Q.Where(p=> p.CodeGroupTakhasos == Convert.ToInt32(CbDoctorsTakhasos.SelectedValue));
if (radioPaygroup.Checked == true)
Q = Q.OrderBy(t => t.PayGroup );
else if (radioDoctorNezam.Checked == true)
Q = Q.OrderBy(t => t.DoctorNezam );
else if (radioPayGroupNezamDate.Checked == true)
Q = Q.OrderBy(t => t.PayGroup + t.DoctorNezam );
else if (radioDrNezamPaygroup.Checked == true)
Q = Q.OrderBy(t => t.DoctorNezam + t.PayGroup);
else
Q = Q.OrderBy(t => t.DateNos + t.IDnos);
//MessageBox.Show(Q.ToString());//
dgv.DataSource = Q.ToList();

به عنوان مثالا DoctorNezam رو انتخاب میکنم پزشکان من مرتب میشه ولی فقط در یک روز در روز دوم دوباره از اول مرتب میشه!!!!!!

143836
خروجی بالا
143837