Я пытался создать страницу поиска для администратора моей системы. Короче говоря, есть 3 параметра как критерии. 1. пользователи, 2. проекты, 3. клиенты. Администратор может составить любую комбинацию из этих трех критериев. например, «Я хотел бы видеть всех пользователей, которые назначены этим проектам, а также всех клиентов» или «Я хочу видеть этого клиента и этот проект, но всех пользователей» и так далее. Как вы реализуете такую фильтрацию? Я использую asp.net 4.0 и linq на всякий случай.
Вот содержание функции и все. Я сделал это, если условия, но это совсем не здорово.
public static List<Data.CurrentActivity> GetUsersActivitySearch(string employeeId, string projectId, string customerId, DateTime startDate, DateTime endDate)
{
DataClassesDataContext dc = new DataClassesDataContext(General.ConnectionString);
if(projectId=="" && customerId!="")
return dc.CurrentActivities.Where(t => t.User.RecId.ToString() == employeeId && t.Customer.RecId.ToString() == customerId && t.ActivityDate >= startDate && t.ActivityDate <= endDate).ToList();
else if (projectId != "" && customerId == "")
return dc.CurrentActivities.Where(t => t.User.RecId.ToString() == employeeId && t.Project.RecId.ToString() == projectId && t.ActivityDate >= startDate && t.ActivityDate <= endDate).ToList();
else if (projectId != "" && customerId != "")
return dc.CurrentActivities.Where(t=>t.User.RecId.ToString()==employeeId && t.Customer.RecId.ToString()==customerId && t.Project.RecId.ToString()==projectId && t.ActivityDate>=startDate && t.ActivityDate<=endDate).ToList();
return dc.CurrentActivities.Where(t => t.User.RecId.ToString() == employeeId && t.ActivityDate >= startDate && t.ActivityDate <= endDate).ToList();
}