Очевидно blProject
объект класса, который реализует IQueryable некоторого класса, скажем, он реализует IQueryable<BlProjectItem>
:
IQueryable<BlProjectItem> blProjects = ...
Очевидно, что каждый BlProjectItem имеет по крайней мере три логических свойства:
class BlProjectItem
{
public bool IsTopProject {get; set;}
public bool IsAnDesigning {get; set;}
public bool IsAnImplementation {get; set;}
...
}
Вы определяете три логических значения трудным способом, вы хотели сказать:
bool top = String.IsNullOrEmpty(form["top"]));
bool design = String.IsNullOrEmpty(form["desgin"]);
bool implement = String.IsNullOrEmpty(form["implement"]);
В зависимости от того, хотите ли вы значения top / design / Implement
Top Design Implement All BlProjectItems where
0 0 0 !IsTopProject && !IsAnDesigning && !IsAnImplementation
0 0 1 !IsTopProject && !IsAnDesigning && IsAnImplementation
0 1 0 !IsTopProject && IsAnDesigning && !IsAnImplementation
0 1 1 !IsTopProject && IsAnDesigning && IsAnImplementation
1 0 0 IsTopProject && !IsAnDesigning && !IsAnImplementation
1 0 1 IsTopProject && !IsAnDesigning && IsAnImplementation
1 1 0 IsTopProject && IsAnDesigning && !IsAnImplementation
0 1 1 IsTopProject && IsAnDesigning && IsAnImplementation
Другими словами, вы хотите:
.Where(item => item.IsTopProject == top
&& item.IsAnDesigning == design
&& item.IsAnImplementation == implement)
Ваша функция будет выглядеть так:
public ActionResult TopProjects(FormCollection form)
{
bool top = String.IsNullOrEmpty(form["top"]));
bool design = String.IsNullOrEmpty(form["desgin"]);
bool implement = String.IsNullOrEmpty(form["implement"]);
var query = blProject.Where(item => item.IsTopProject == top
&& item.IsAnDesigning == design
&& item.IsAnImplementation == implement)
// only if you don't want all properties of BlProjectItem:
.Select(item => new
{
// Select the items that you want, e.g.
Id = item.Id,
Name = item.Name,
...
});
return view(Query);
}