PDA

View Full Version : سوال: نحوه استفاده از دستور Func



Iran58
یک شنبه 13 خرداد 1397, 11:51 صبح
سلام
من کد زیر را نوشته ام

public ICollection<Employee> Search(string natiolId, string lName, Func<Employee, bool> orderBy)
{
TestEntities db = new TestEntities();
var q = db.T_P_EmployeeBCSpec.Where(u => u.NationalID.StartsWith(natiolId));
q = q.Where(c => c.LastName.StartsWith(lName));
return q.ToList();
}

حال نمی دانم جواب را چکونه در دیتاگرید مورد نظرم نمایش
بدهم

private void btnSearch_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = Search(txtCodeMali.Text, txtLastName.Text);
}

کدم را چگونه باید تغییر بدهم

ژیار رحیمی
یک شنبه 13 خرداد 1397, 13:53 عصر
شما بجای Func<Employee, bool> برای مرتب سازی باید بصورت Expression<Func<Employee, T>> نوشته شود.دلیل استفاده از جنریک تایپT در Expression شما باید نوع فیلد که براساس آن مرتب سازی صورت میگیرد را مشخص نمایید برای جلوگیری از کدهای تکراری بصورت جنریک تعریف شده است.

public ICollection<Employee> Search<T>(string natiolId, string lName, Expression<Func<Employee, T>> orderBy)
{
TestEntities db = new TestEntities();
var q = db.T_P_EmployeeBCSpec.Where(u => u.NationalID.StartsWith(natiolId));
q = q.Where(c => c.LastName.StartsWith(lName));
return q.OrderBy(orderBy).ToList();
}


private void btnSearch_Click(object sender, EventArgs e)
{
//مرتب سازی بر اساس فیلدی از نوع string
dataGridView1.DataSource = Search<string>(txtCodeMali.Text, txtLastName.Text,c=>c.lName);


//مرتب سازی بر اساس فیلدی از نوع int
//dataGridView1.DataSource = Search<int>(txtCodeMali.Text, txtLastName.Text,c=>c.Id);
}