شما بجای 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);
}